JAVA中線程同步方法

2021-08-27 16:52:37 字數 1029 閱讀 6894

1wait方法

該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分(**塊)的執行緒停止執行,並釋放當前獲得的呼叫wait所在的**塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態(一旦獲得鎖就恢復執行)。

呼叫wait方法需要注意幾點:

第一點:wait被呼叫的時候必須在擁有鎖(即synchronized修飾的)的**塊中。

第二點:恢復執行後,從wait的下一條語句開始執行,因而wait方法總是應當在while迴圈中呼叫,以免出現恢復執行後繼續執行的條件不滿足卻繼續執行的情況。

第三點:若wait方法引數中帶時間,則除了notify和notifyall被呼叫能啟用處於wait狀態(等待狀態)的執行緒進入鎖競爭外,在其他執行緒中interrupt它或者引數時間到了之後,該執行緒也將被啟用到競爭狀態。

第四點:wait方法被呼叫的執行緒必須獲得之前執行到wait時釋放掉的鎖重新獲得才能夠恢復執行。

2notify方法和notifyall方法

notify方法通知呼叫了wait方法,但是尚未啟用的乙個執行緒進入執行緒排程佇列(即進入鎖競爭),注意不是立即執行。並且具體是哪乙個執行緒不能保證。另外一點就是被喚醒的這個執行緒一定是在等待wait所釋放的鎖。

notifyall方法則喚醒所有呼叫了wait方法,尚未啟用的程序進入競爭佇列。

3synchronized關鍵字

第一點:synchronized用來標識乙個普通方法時,表示乙個執行緒要執行該方法,必須取得該方法所在的物件的鎖。

第二點:synchronized用來標識乙個靜態方法時,表示乙個執行緒要執行該方法,必須獲得該方法所在的類的類鎖。

第三點:synchronized修飾乙個**塊。類似這樣:synchronized(obj) 。表示乙個執行緒要執行該**塊,必須獲得obj的鎖。這樣做的目的是減小鎖的粒度,保證當不同塊所需的鎖不衝突時不用對整個物件加鎖。利用零長度的byte陣列物件做obj非常經濟。

本文出處:

JAVA中線程同步方法

在這裡看到的 1 wait方法 該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分 塊 的執行緒停止執行,並釋放當前獲得的呼叫wait所在的 塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態 一旦獲得鎖就恢復執行 呼叫wait方法需要...

java中線程同步基礎

臨界區 臨界區是乙個用以訪問訪問共享資源的 塊,這個 塊在同一時間內只允許乙個執行緒執行。重入鎖 當末個執行緒請求乙個由其他執行緒持有的鎖時,發出的請求的執行緒就會阻塞,然而內建鎖 synchronized 是可重入的,因此如果末個執行緒試圖獲得乙個已經由他自己持有的鎖,那麼這個請求就會成功。syn...

java中線程的同步性

目的 測試同步 塊和同步函式鎖定同乙個物件才能實現執行緒安全 其實我們能夠實現執行緒同步其實就是因為我們在執行到某乙個執行緒的時候,設定了乙個標誌 也就是我們鎖定了乙個物件,要實現執行緒的同步,我們每次鎖定的物件必須要是同乙個 class lesson5testdemo1 catch excepti...