當乙個執行緒使用的同步方法中用到某個變數,而此變數有需要其他執行緒修改後才能符合本執行緒的需要,
那麼可以在同步方法中使用wait(),wait方法可以中斷執行緒的執行,使本執行緒等待,暫時讓出cpu的使用權,並允許其他執行緒使用這個同步方法。
其他執行緒如果在使用這個同步方法時,不許需要等待,那麼它使用這個同步方法。其他執行緒如果再使用這個同步方法是不需要等待,那麼它使用完
這個同步方法的同時,應當用notifyall()方法通知所有由於使用這個同步方法而處於等待的執行緒結束等待.曾中斷的執行緒就會從剛才的中斷處繼續執行
這個同步方法.....
1/*2在下面的列子中:wait();
3notify();
4notifyall();
5*/
/*張飛和李逵買電影票。售票員只有兩張5元的錢,電影票5元一張。張飛
拿20元一張的人民幣排在李逵的前面買票,李逵拿一張5元的人民幣買票,因此張飛必須等待。
*/
1//package scan_boobs;
2public
class example12_8 extends
window_scan315
}1617class tickethouse implements
runnable
1828
private
synchronized
void saleticket(int
money)
2936
else
if(money==20)
37 catch
(interruptedexception e) 49}
50 fiveamount-=3;
51 twentyamount++;
52this.out("給"+thread.currentthread().getname()+"入場卷,"
53 +thread.currentthread().getname()+"給20,找贖15元");54}
需要特別注意:
/*如果鹹的蛋疼了,將wait(); ----》改為 thread.sleep(); 然後呵呵,你會就會這樣在許多實際的問題中wait方法應當放在乙個"while(等待的條件){}"的迴圈語句中,而不是「if(等待條件){}的分支語句中」
*/
**:
1效果圖:package
scan_boobs;
2public
class example12_8 extends
window_scan315
}1617class tickethouse implements
runnable
1828
private
synchronized
void saleticket(int
money)
2936
else
if(money==20)
37 catch
(interruptedexception e) 49}
50 fiveamount-=3;
51 twentyamount++;
52this.out("給"+thread.currentthread().getname()+"入場卷,"
53 +thread.currentthread().getname()+"給20,找贖15元");54}
55notifyall();56}
57private
void
out(string name)58
61 }
Java多執行緒(四) 協調同步執行緒
當乙個執行緒使用的同步方法中用到的某個變數,而此變數又需要其他執行緒修改才能符合本執行緒的需要,那麼可以再同步方法中使用wait 方法。使用wait 方法時正確的模板是將鎖放置在while 迴圈中。package test public class tickethome implements run...
java執行緒同步之CountDownLatch
1 類說明 jdk的concurrent包中的countdownlatch類是乙個執行緒同步的輔助類,它使得執行緒可以一直等待在其它執行緒中執行的操作,直到此操作結束。countdownlatch在初始化的時候指定乙個大小值n,呼叫countdownlatch的await方法的執行緒會陷入等待之中,...
java執行緒同步之synchronized
同步指的是呼叫乙個方法時,在沒有得到結果之前,這個呼叫就不返回。執行緒同步的意思與之類似,但執行緒同步並不是說讓乙個執行緒執行完了再執行其它執行緒,一般是指讓執行緒中的某一些操作進行同步就可以。執行緒安全就是多執行緒訪問時,採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進...