线程安全问题
当多个线程共享一个全局变量的时候,做写操作的时候可能会收到其他线程的干扰。从而产生线程安全问题。
使用同步的方法
同步代码块。
同步方法 -》 静态同步方法(锁为当前类的字节码对象)
-》 非静态同步方法(锁对象是this)
ThreadLocal
给每一个线程提供一个局部变量,内部自己维护了一个Map(并没有实现Map接口,而是自己实现了Map的效果),键为当前的线程,值是线程私有的局部变量。
多线程的特性
原子性、可见性、有序性。
Java内存模型(JMM)
JMM决定了一个线程对共享变量写入的时候。是否能够对另外一个线程可见。
主内存:共享变量。
本地内存:共享变量的副本。
volatile关键字
用来保证线程的可见性(不能够保证原子性),被这个关键字修饰的变量的值被某个线程修改之后会很快的从本地内存刷新到主内存中,保证其他线程立马看到变量值的更新。
时候时候使用volatile关键字
只要是线程的全局共享变量就使用。