文章目录
——————————————————————————
volatile的应用
volatile可以修饰变量
并发编程中有两种锁:
- synchronized
- volatile
volatile:
- volatile是轻量级的 synchronized
- volatile锁住的时候可以写,是只保证读是正确的
volatile在多处理器开发中保证了共享变量的“可见性” :
- 可见性:当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值。
- 因此能保证读到的值是正确的
- 可见性一定是在多线程的情况下,一个线程对变量进行了修改,其他线程能立刻知道
- 每个线程对变量进行操作的时候都会拷贝一个副本数据
线程不安全是因为t1,t2,t3操作变量s时都会拷贝一份s副本,彼此不知道,t1给s+1,t2给s+2,t1先更新数据,t2后更新数据,这时cpu的s=2,而不是正确的3,这样线程不安全,可见性是指t1对变量s进行操作之后,t2,t3等其他变量拷贝的s的数据就会失效,需要再读一次s的数据,这样读到的数据就是新修改的数据。
- volatile修饰符使用恰当的话,比synchronized的使用和执行成本更低,因为volatile功能更少,它不会增加线程上下文的切换和调度,速度更快。
- cpu分配时间片的时候