解决线程安全的三个方法
-
同步代码块
<!--其中的对象可以是任何对象,但多个线程使用的锁对象是同一个-->
Obj obj = new Obj();
synchronized(obj){
//代码块
可能会阐释线程安全问题的代码
}
当线程1进入到synchronized,
-
同步方法&静态同步方法
-
把访问了共享数据的代码抽取出来,放到一个方法中
-
在方法上添加synchronized修饰符
-
//同步方法
public synchronized void method(){
可能会阐释线程安全问题的代码
}
同步方法的所对象就是实现类对象 new RunnableImpl()==this
//静态同步方法
public static synchronized void method(){
可能会阐释线程安全问题的代码
}
静态同步方法的锁对象是奔雷的class属性-->类名.class
-
使用Lock锁
-
在成员位置创建一个Reentrantlock对象
-
在可能会出现线程安全问题的代码前调用lock接口中的方法lock获取锁
-
-