Java线程模型的规则与共享变量可见性

一、线程模型规则

1、线程对所有共享变量的操作必须在各自工作内存中进行,不能直接从主内存中读写。
2、不同线程之间无法直接访问其它线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。

二、共享变量可见性:synchronized与volatile

synchronized
必须使用同一把锁,可使变量相关操作原子性。
a,线程解锁前,会将工作内存中共享变量的最新值刷新到主内存中。
b,线程获得锁之前,将从主内存中读取共享变量的最新值,更新到工作内存中。

volatile:
通过加入内存屏障和禁止重排序来实现。不保证volatile变量相关操作原子性。
a,对volatile变量写操作时,对写操作后加入store屏障指令。
b,对volatile变量读操作时,对读操作后加入store屏障指令。

参考:http://imooc.com/learn/352



Article posted at:2015-05-11