什么是线程安全?
1.为什么会有线程安全问题?
当多个线程同时共享同一个成员变量(全局变量)或静态变量,做写操作时,可能会发生数据冲突问题,也就是线程安全问题。做读操作时不会发生数据冲突问题。
2.线程安全问题怎么解决?
使用synchronized(同步)关键字或者jdk1.5里面的并发包lock
2.1 synchronized
2.1.1 synchronized 同步代码块
将可能发生线程安全问题的代码,用synchornized包括起来。
注:synchronized代码块中,ob参数表示为锁,多线程调用的时候,该锁必须为同一个。
2.1.2 synchronized 同步方法
在需要同步的方法上面添加synchronized修饰。
注:同步函数使用的是“this”锁,等同于:
2.1.3 静态同步方法
在需要同步的方法上面添加static synchronized修饰。
注:静态同步方法,使用的锁是该方法所属字节码文件对象,可以用getClass方法获取,也可以用 当前类名.class 表示
注:synchronized 关键字只适合单个JVM,集群的情况不适用,分布式锁,一般使用zookeeper.