java學習之協調同步的執行緒

2021-09-06 17:26:31 字數 2243 閱讀 2787

當乙個執行緒使用的同步方法中用到某個變數,而此變數有需要其他執行緒修改後才能符合本執行緒的需要,

那麼可以在同步方法中使用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方法應當放在乙個"while(等待的條件){}"的迴圈語句中,而不是「if(等待條件){}的分支語句中」

*/

如果鹹的蛋疼了,將wait();  ----》改為 thread.sleep(); 然後呵呵,你會就會這樣

**:

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

同步指的是呼叫乙個方法時,在沒有得到結果之前,這個呼叫就不返回。執行緒同步的意思與之類似,但執行緒同步並不是說讓乙個執行緒執行完了再執行其它執行緒,一般是指讓執行緒中的某一些操作進行同步就可以。執行緒安全就是多執行緒訪問時,採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進...