JAVA线程中,哪里有synchronized,那里就要有notifyAll()
2009-04-21 19:58
399 查看
JAVA线程中,哪里有synchronized,那里就要有notifyAll(),写多线程一定要记得这个原则,否则是哪里出了问题,你根本就找不出来,我可是吃了够大的苦,因为我模拟的线程很多,都是1000一批,大部份时候都是不能够全部执行成功,一步步的找呀,真的很痛苦。同步一般用的比较多的用块同步、方法同步,也有些需要对类同步,对类同步则类中的所有方法都是同步的,如典型的Hashtable,就是线程安全的,也即同步的。以下摘一些写法:
块同步:
方法同步:
另外,一个同步方法调用另外一个同步方法的时候,最好两个方法中都把notifyAll()给加上,这样只有好处,不会有坏处
本文出自:冯立彬的博客
块同步:
synchronized(this){ //dosomething //下面这一步千万别忘了,要告诉别的线程你OK了,该别人了 notifyAll(); } //另注:千万不要将notifyAll()写在同步块的外面,否则自己连怎么死的 //都不知道,不要看我,我就是这么被折磨过来的,谁叫自己不争气呢,要 //写成下面这样 //notifyAll();
方法同步:
private synchronized void addDealOk(){ //dosomething notifyAll(); } //同理,不要把notifyAll()写到调用该同步方法的方法里面,一定要写在 //被调用的同步方法里面
另外,一个同步方法调用另外一个同步方法的时候,最好两个方法中都把notifyAll()给加上,这样只有好处,不会有坏处
本文出自:冯立彬的博客
相关文章推荐
- 转载 JAVA线程中,哪里有synchronized,那里就要有notifyAll()
- java线程同步(synchronized,wait,notify,notifyAll)
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- JAVA 线程状态以及synchronized,wait,sleep,yield,notify,notifyAll
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- JAVA 线程状态以及synchronized,wait,sleep,yield,notify,notifyAll
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- 初探java 对象中wait(),notify(),notifyAll() 和线程中的synchronized
- JAVA线程状态以及synchronized,wait,sleep,yield,notify,notifyAll
- Java线程(二):线程同步synchronized和volatile
- Java基础-多线程-③线程同步之synchronized
- Java基础巩固之线程的同步synchronized
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- Java线程的同步 - synchronized
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- Java 并发--- 线程间协作的两种方式:wait、notify、notifyAll和Condition
- java线程同步volatile与synchronized
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- Java线程同步:synchronized锁住的是代码还是对象