synchronized,volatile都解决了共享变量 value 的内存可见性问题,但是前者是独占锁,同时只能有一个线程调用 get()方法,其他调用线程会被阻塞, 同时会存在线程上下文切换和线程重新调度的开销,这也是使用锁方式不好的地方. 而后者是非阻塞算法,不会造成线程上下文切换的开销. volatile 虽然提供了可见性保证,但并不保证操作的原子性. 一般在什么时候才使用 volatile 关键字呢? 写入变量值不依赖.变量的当前值时. 因为如果依赖当前值,将是获取一计算一写入 三步…