volatile在java中的应用
线程之间的可见性
主内存一个常量,不同线程之前保持可见性,只需要在定义常量的时候增加 volatile。
private volatile int count=1;
其中线程a和线程b通过volatile关键字保持共享数据。具体流程是当线程a从主内存中读取count=1,然后修改count=2之后刷新主内存为count=2,然后使线程b的count值失效,线程b需要再次从主内存中读取count。
之所以不同线程用工作内存,而不是直接从主内存中操作是从性能方面考虑的。
多个线程之间不能保证原子性
volatile是不能保证线程安全的,就是如果多个线程同时修改count的时候,数据就不能保证修改正确,这个时候就要依赖加锁处理。