1、线程对所有共享变量的操作必须在各自工作内存中进行,不能直接从主内存中读写。
2、不同线程之间无法直接访问其它线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。
synchronized
必须使用同一把锁,可使变量相关操作原子性。
a,线程解锁前,会将工作内存中共享变量的最新值刷新到主内存中。
b,线程获得锁之前,将从主内存中读取共享变量的最新值,更新到工作内存中。
volatile:
通过加入内存屏障和禁止重排序来实现。不保证volatile变量相关操作原子性。
a,对volatile变量写操作时,对写操作后加入store屏障指令。
b,对volatile变量读操作时,对读操作后加入store屏障指令。
参考:http://imooc.com/learn/352