多執行緒 同步的實現方法

2022-04-10 10:39:13 字數 947 閱讀 9046

多執行緒有兩種實現方法,分別是繼承thread類與實現runnable介面

同步的實現方面有兩種,分別是synchronized,wait與notify

wait():使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。

sleep():使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉interruptedexception異常。

notify():喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執行緒,而是由jvm確定喚醒哪個執行緒,而且不是按優先順序。

allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒乙個物件的鎖,而是讓它們競爭。

sleep就是正在執行的執行緒主動讓出cpu,cpu去執行其他執行緒,在sleep指定的時間過後,cpu才會回到這個執行緒上繼續往下執行,如果當前執行緒進入了同步鎖,sleep方法並不會釋放鎖,即使當前執行緒使用sleep方法讓出了cpu,但其他被同步鎖擋住了的執行緒也無法得到執行。

wait是指在乙個已經進入了同步鎖的執行緒內,讓自己暫時讓出同步鎖,以便其他正在等待此鎖的執行緒可以得到同步鎖並執行,只有其他執行緒呼叫了notify方法(notify並不釋放鎖,只是告訴呼叫過wait方法的執行緒可以去參與獲得鎖的競爭了,但不是馬上得到鎖,因為鎖還在別人手裡,別人還沒釋放。如果notify方法後面的**還有很多,需要這些**執行完後才會釋放鎖),呼叫wait方法的執行緒就會解除wait狀態和程式可以再次得到鎖後繼續向下執行

分幾種情況:

1.其他方法前是否加了synchronized關鍵字,如果沒加,則能。

2.如果這個方法內部呼叫了wait,則可以進入其他synchronized方法。

3.如果其他個方法都加了synchronized關鍵字,並且內部沒有呼叫wait,則不能。

4.如果其他方法是static,它用的同步鎖是當前類的位元組碼,與非靜態的方法不能同步,因為非靜態的方法用的是this。

多執行緒同步方法

今天學習了。用c語言寫的多執行緒程式 同步原來有如此多方法 1.臨界區 臨界區是保證在某乙個時間只有乙個執行緒可以訪問資料的方法。使用它的過程中,需要給各個執行緒提供乙個共享的臨界區物件,無論哪個執行緒占有臨界區物件,都可以訪問受到保護的資料,這時候其它的執行緒需要等待,直到該執行緒釋放臨界區物件為...

多執行緒同步方法

臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源進行訪問,如果有多個執行緒試圖訪問公共資源,那麼在有乙個執行緒進入...

多執行緒的幾種實現方法 同步的幾種實現方法

多執行緒有兩種實現方法,分別是繼承 thread 類與實現 runnable介面 同步的實現方面有兩種,分別是 synchronized,wait 與notify wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的 lock。sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼...