新的解决线程安全性问题的方案volatile
syncronized可以解决线程中遇到的安全性问题
相对来说重量级锁
虽然jdk6增加了轻量级锁和偏向锁
实际情况使用起来显得笨重
volatile属于轻量级锁,被volatile修饰的变量在线程之间是可见的
可见:一个线程修改了这个变量的值
在另外一个线程中能够独到这个修改后的值
synchronized除了线程之间互斥以外,还有一个
非常大的作用,就是保证可见性(前提多个线程拿到的是同一把锁)
加了volatile在汇编中多了lock指令
lock指令
/在多处理器的系统上,将当前处理器缓存行(cpu缓存的最小单位)的内容写回到系统内存
/写回到内存的操作会使在其他cpu里缓存了该内存
地址的数据失效
硬盘--内存--CPU的缓存()
在适用场景下使用,比synchronized性能高得多
而在一个方法中大量使用volatile,cpu的缓存就用不上了;
通过volatile修饰,会减少大量cpu的优化;
系统性能降低了
syncronized可以解决线程中遇到的安全性问题
相对来说重量级锁
虽然jdk6增加了轻量级锁和偏向锁
实际情况使用起来显得笨重
volatile属于轻量级锁,被volatile修饰的变量在线程之间是可见的
可见:一个线程修改了这个变量的值
在另外一个线程中能够独到这个修改后的值
synchronized除了线程之间互斥以外,还有一个
非常大的作用,就是保证可见性(前提多个线程拿到的是同一把锁)
加了volatile在汇编中多了lock指令
lock指令
/在多处理器的系统上,将当前处理器缓存行(cpu缓存的最小单位)的内容写回到系统内存
/写回到内存的操作会使在其他cpu里缓存了该内存
地址的数据失效
硬盘--内存--CPU的缓存()
在适用场景下使用,比synchronized性能高得多
而在一个方法中大量使用volatile,cpu的缓存就用不上了;
通过volatile修饰,会减少大量cpu的优化;
系统性能降低了