您的位置:首页 > 移动开发

JAVA并发:happens-before阐述

2012-01-05 12:14 633 查看
happens-before 是JSR133确定的东东,这个相信大家都知道了。 至于它的作用呢,其实它就是一套规则,只要你的程序中A HB B,那么B就能看到A的操作(无论A/B是否是同一个线程).

 

其内容为如下:

 

 (注:JMM动作(Java Memeory Model Action),Java存储模型动作。一个动作(Action)包括:变量的读写、监视器加锁和释放锁、线程的start()和join())

 

happens-before完整规则:

(1)同一个线程中的每个Action(注1)都happens-before于出现在其后的任何一个Action。

(2)对一个监视器的解锁happens-before于每一个后续对同一个监视器的加锁。

(3)对volatile字段的写入操作happens-before于每一个后续的同一个字段的读操作。

(4)Thread.start()的调用会happens-before于启动线程里面的动作。

(5)Thread中的所有动作都happens-before于其他线程检查到此线程结束或者Thread.join()中返回或者Thread.isAlive()==false。

(6)一个线程A调用另一个另一个线程B的interrupt()都happens-before于线程A发现B被A中断(B抛出异常或者A检测到B的isInterrupted()或者interrupted())。

(7)一个对象构造函数的结束happens-before与该对象的finalizer的开始

(8)如果A动作happens-before于B动作,而B动作happens-before与C动作,那么A动作happens-before于C动作。

多线程文章,推荐
http://www.blogjava.net/xylz/archive/2010/07/03/325168.html http://www.goldendoc.org/category/juc/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息