多執行緒 執行緒互動

2022-03-25 20:28:44 字數 936 閱讀 3645

在實際功能中,會存在一些執行緒互動的情況。比如:乙個執行緒執行某個操作,當操作的物件到達某種狀態時,會等待其他執行緒來執行。

下面**的功能是,乙個執行緒對乙個數字執行減少方法,當減到1時,等待增加執行緒操作。

public

class thread_interactive extends

thread

catch

(interruptedexception e) }}

};t1.start();

//增加執行緒

thread t2 = new

thread()

catch

(interruptedexception e) }}

};t2.start();

}}class

operation

public

synchronized

void reduce() throws

interruptedexception

num--;

system.out.println("reduce當前數字是:" +num);

}}

最後輸出結果是:數字會不停減少,只到1就會增加。但是由於增加執行緒比減少執行緒慢,所以最後會一直在1、2之間徘徊。

wait:讓占用了這個同步物件的執行緒,臨時釋放當前的占用,並且等待。 所以呼叫wait是有前提條件的,一定是在synchronized塊裡,否則就會出錯。

notify:通知乙個等待在這個同步物件上的執行緒,你可以甦醒過來了,有機會重新占用當前物件了。當這個執行緒執行完再次釋放後,之前等待的執行緒會重新開始占用,並不會一直等下去。

notifyall:通知所有的等待在這個同步物件上的執行緒,你們可以甦醒過來了,有機會重新占用當前物件了。

多執行緒三(互動)

1 wait notify notifyall 這單個方法是屬於object類的方法 wait 導致當前的執行緒等待,直到其他執行緒呼叫此物件的notify 方法或notifyall 方法 notify 喚醒在此物件監視器等待的乙個執行緒 notifyall 喚醒在此物件監視器上等待的所有執行緒 2...

010 多執行緒互動

1 使用join執行緒間排隊 2 使用wait notify 進行執行緒間互動 3 使用 countdownlatch進行執行緒互動等待執行緒id 11正在等待其他執行緒 等待執行緒id 11汽車 完成執行緒id 21正在工作 執行緒id 16正在工作 執行緒id 17正在工作 執行緒id 13正在...

多執行緒的互動

當多個執行緒同時共享訪問同一資料時,每個執行緒都嘗試操作該資料,從而導致改資料被破壞,這種現象稱為爭用條件。同步的實現 wait notify notifyall 當乙個執行緒要訪問共享資源,首先要拿到鎖後進入臨界區,如果發現某些條件不符合,呼叫wait方法釋放鎖資源,執行緒進入鎖物件上的wait ...