针对JSR-133内存模型,使用happen-before概念来描述内存可见性。
一个操作的结果对另外一个操作可见,就必须存在happen-before关系。
happen-before规则
程序顺序规则:一个线程中的每一个操作,happen-before于该线程中的任意后续操作
监视器锁规则:对于一个锁的解锁,happen-before必须随后对这个锁加锁
volatile变量规则:对于一个volatile域的写,happen-before于任意后续对着给volatile域的读。
传递性:如果A happen-before B B happen-before C 则 A happen-before C。
保证多线程的程序的结果不会被重排序改变
区别于as-if-serial,as-if-serial是保证单线程的程序结果不会被改变。
取自《ava并发编程的艺术》