Java并发-volidate关键字的理解

使用volidate关键字修饰的成员变量,保证可见性,也就是当一个线程修改这样的成员变量后,其他的线程能够立即看到这次的修改。有两个方面的原因:

1.编译器不优化对这样的关键字修饰变量的一些访问操作

2.对读,写这个关键字修饰的变量前后,会追加内存屏障指令,使其当读之前,会主动从主存中读,当写之后,会使其他的缓存内的这个变量值失效,迫使使用那个缓存的线程再次读取这个变量时主动从主存中读取。

为何volidate关键字不保证原子性?

针对这样的变量的get,set能够保证原子性,但是针对某些操作无法保证原子性,比如++,--这样的操作。

使用的方式一般是一个线程修改变量,其余的线程读取变量。用作线程间通知的作用。

猜你喜欢

转载自www.cnblogs.com/weiguangyue/p/10526796.html