JAVA線程中,哪裏有synchronized,那裏就要有notifyAll()

JAVA線程中,哪裏有synchronized,那裏就要有notifyAll(),寫多線程一定要記得這個原則,否則是哪裏出了問題,你根本就找不出來,我可是吃了夠大的苦,因爲我模擬的線程很多,都是1000一批,大部份時候都是不能夠全部執行成功,一步步的找呀,真的很痛苦。同步一般用的比較多的用塊同步、方法同步,也有些需要對類同步,對類同步則類中的所有方法都是同步的,如典型的Hashtable,就是線程安全的,也即同步的。以下摘一些寫法:

塊同步:

synchronized(this){ //dosomething //下面這一步千萬別忘了,要告訴別的線程你OK了,該別人了 notifyAll(); } //另注:千萬不要將notifyAll()寫在同步塊的外面,否則自己連怎麼死的 //都不知道,不要看我,我就是這麼被折磨過來的,誰叫自己不爭氣呢,要 //寫成下面這樣 //notifyAll();

方法同步:

private synchronized void addDealOk(){ //dosomething notifyAll(); } //同理,不要把notifyAll()寫到調用該同步方法的方法裏面,一定要寫在 //被調用的同步方法裏面

另外,一個同步方法調用另外一個同步方法的時候,最好兩個方法中都把notifyAll()給加上,這樣只有好處,不會有壞處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章