- 浏览: 18350 次
- 性别:
- 来自: 成都
最新评论
-
jstl1point0:
可以不错,保持同步的基本办法;
线程同步之脏读问题
文章列表
Linux查看日志命令-less tail
- 博客分类:
- Linux
平时工作中定位问题时,查看日志用的最多的就是less和tail命令:
1.less命令
less 文件名 ====查看日志
less 文件名 | grep -n 筛选内容 ============根据内容进行筛选显示,同时也显示行号
d====向下翻页
u====向上翻页
g====跳到首行
G===跳到底部
?查找内容====向上查找
/查找内容=====向下查找
n=====下一个
N====上一个
q====退出
2.tail命令
tail -f 文件名========实时查看
tail -200f 文件名======实时查看后200行
...
git我在项目中的使用
- 博客分类:
- 项目中使用的管理工具
使用的是 Wizard研发管理-平安云 (统一代码管理平台)来管理code:
1.安装好git客户端,点击“Git Gui Here”,选择“Help”->show ssh key,生成密钥
2.登陆统一代码管理平台,将密钥添加
3.选择一个代码分支,复制ssh URL:如 ssh://git@code.paic.com.cn:8005/my/my-project.git
4.打开Git Gui Here,切换到D:\zan,git clone ssh://git@code.paic.com.cn:8005/my/my-project.git
(git ini ...
idea常用快捷键的使用
- 博客分类:
- 项目中使用的开发工具
掌握以下快捷键的使用,在开发中足矣(这也是我在使用idea中用的最多的):
1. -----------自动代码--------
fori/sout/psvm+tab即可生成循环、System.out、main方法等boilerplate样板代码
Ctrl+Alt+O 优化导入的类和包
Alt+Insert 生成代码(如get,set方法,构造函数等)或者右键(Generate)
fori/sout/psvm + Tab
Ctrl+Alt+T 生成try catch 或者 Alt+enter
Ctrl + O 重写方法
Ctrl + I 实现方法
Ctrl+sh ...
做项目的感想:
1.尽量用项目中已经封装好的工具类,切忌自己又去写(减少垃圾代码),使代码更规范
2.了解性能及原理,用好API,就是在减少bug的出现,避免踩坑
package com.pingan.scf.core.server.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections.MapUtils;
import java.math.BigDecimal;
i ...
hashMap的实现是由数组和链表,数据结构是"链表散列"
1.准备数据 实体类Info
package com.gwzan.map;
/**
* 员工信息类
* @author zan
*
*/
public class Info {
private String key;
private String name;
public Info(String key,String name){
this.key=key;
this.name=name;
}
public String ge ...
线程同步,要确保业务完整性(原子性),多个方法都要使用synchronized,否则会出现脏读问题
demo:
package com.zan;
/**
* 保持业务整体完整,都要使用synchronized,来确保原子性
*/
public class DirtyRead {
private String username = "lisi";
private String password = "123456";
public synchronized void setValue(Strin ...
同步需加synchronized关键字,同步是为了线程安全,而线程安全需要满足两个特性:原子性,可见性
示例:
package com.zan;
// 对象锁的同步和异步问题
public class TestObject {
public synchronized void method1(){
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(5000);
} catch (InterruptedException e) {
...
多个线程多个锁,一个对象就有一把锁
类锁,static修饰
示例:
package com.zan;
/**
* 关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,
* 所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),
*
* 在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class类)。
*
*/
public class MultiThread {
private static int n ...
线程安全:当多个线程访问同一个类时,这个类始终表现出正确的行为
synchronized :可在任意方法或对象上加锁
一.extends Thread
package com.zan;
public class TestThread extends Thread{
private int count = 5 ;
//synchronized加锁 ,实现线程同步
//加锁的这段代码称为:互斥区或临界区
public void run(){ //也可在直接方法上加synchronized
synchronized (this) ...
springboot可实现快速开发,其中提供了spring-boot-starter-web为web开发提供了支持,它为我们提供了嵌入的tomcat和springmvc的依赖
thymeleaf是一个java类库,是xml/xhttml/html5的模板引擎,可作为MVC的web应用的view层。也是在springboot开发中推荐采用的
1.构建一个springboot项目
选择Spring Starter Project新建项目,同时选择web和thymeleaf依赖
pom.xml:
<?xml version="1.0" encod ...
Interceptor拦截器实现对每一个请求处理前后进行相关的业务,类似于servlet的Filter
普通的Bean去继承HandlerInterceptorAdapter或实现HandlerInterceptor来自定义拦截器
通过重写WebMvcConfigurerAdapter的addInterceptors方法来注册自定义的拦截器
示例如下:
在“springmvc简单构建一个项目(一)”的基础上增加以下这些:
1.自定义拦截器
package com.zgw.springmvc;
import javax.servlet.http.HttpServle ...
Springmvc提供了一个DispatcherServlet来开发web应用
这里采用Sevlet3.0+无web.xml的配置方式,实现WebApplicationInitializer接口替代web.xml
maven构建零配置的springmvc原型项目
1.构建maven项目
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche ...
spring里的事件为bean与bean间消息通信提供了支持,我们希望在一个bean处理完一个任务后,通知其他的bean做相应的事,此时就需要另外的Bean去监听当前bean所发生的事件
定义spring的事件需做以下几件事:
自定义事件,继承Appl ...
spring中通过@EnableScheduling来开启对定时任务的支持
然后通过@Scheduled声明,它支持多种类型的定时任务,包含cron,fixDelay,fixRate等
实例如下:
定时任务执行类
package com.zgw.taskscheduler;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springfram ...
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的
可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor
在实际开发中由于多是异步,所以使用@EnableAsync来支持异步任务,且要在Bean的方法中使用@Async来声明其是一个异步任务
以下实例:
配置类
package com.zgw.taskexecutor;
import java.util.concurrent.Executor;
import org.springframework.aop.interceptor ...