三个概念:原子性,可见性,有序性。
原子性:要么成功,要么失败。
可见性:是指共享数据的时候,一个线程修改了数据,其他的线程知道数据被修改,会从主存中重新读取数据。
有序性:代码的有序性,因为代码可能发生指令重排序。
volatile关键字作用:
1.某个线程修改了被volatile关键字修饰变量是,根据数据一致性的协议,通过信号量,更改其他线程的高速缓存中volatile关键字修饰变量状态为无效状态,其他线程如果需要重写读取该变量会再次从主内存中读取,而不是读取自己的高速缓存中的。
2.被volatile关键字修饰变量不会指令重排序。
volatile不能保证原子性,需要用锁来保证,在方法加上synchronized
ThreadLocal类来保证线程封闭:
ThreadLocal类能使线程中的某个值与保存值的对象关联起来,它提供了get、set方法,这些方法为每个使用该变量的线程保存一份独立的副本,因此get总是set当前线程的set最新值。
网友评论