您的位置:首页 > 编程语言 > Java开发

JAVA线程中,哪里有synchronized,那里就要有notifyAll()

2009-04-21 19:58 399 查看
JAVA线程中,哪里有synchronized,那里就要有notifyAll(),写多线程一定要记得这个原则,否则是哪里出了问题,你根本就找不出来,我可是吃了够大的苦,因为我模拟的线程很多,都是1000一批,大部份时候都是不能够全部执行成功,一步步的找呀,真的很痛苦。同步一般用的比较多的用块同步、方法同步,也有些需要对类同步,对类同步则类中的所有方法都是同步的,如典型的Hashtable,就是线程安全的,也即同步的。以下摘一些写法:

块同步:

synchronized(this){
//dosomething
//下面这一步千万别忘了,要告诉别的线程你OK了,该别人了
notifyAll();
}
//另注:千万不要将notifyAll()写在同步块的外面,否则自己连怎么死的
//都不知道,不要看我,我就是这么被折磨过来的,谁叫自己不争气呢,要
//写成下面这样
//notifyAll();


方法同步:

private synchronized void addDealOk(){
//dosomething
notifyAll();
}
//同理,不要把notifyAll()写到调用该同步方法的方法里面,一定要写在
//被调用的同步方法里面


另外,一个同步方法调用另外一个同步方法的时候,最好两个方法中都把notifyAll()给加上,这样只有好处,不会有坏处

本文出自:冯立彬的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多线程