1 wait方法:
該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分(**塊)的執行緒停止執行,並釋放當前獲得的呼叫wait所在的**塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態(一旦獲得鎖就恢復執行)。
呼叫wait方法需要注意幾點:
第一點:wait被呼叫的時候必須在擁有鎖(即synchronized修飾的)的**塊中。
第二點:恢復執行後,從wait的下一條語句開始執行,因而wait方法總是應當在while迴圈中呼叫,以免出現恢復執行後繼續執行的條件不滿足卻繼續執行的情況。
第三點:若wait方法引數中帶時間,則除了notify和notifyall被呼叫能啟用處於wait狀態(等待狀態)的執行緒進入鎖競爭外,在其他執行緒中interrupt它或者引數時間到了之後,該執行緒也將被啟用到競爭狀態。
第四點:wait方法被呼叫的執行緒必須獲得之前執行到wait時釋放掉的鎖重新獲得才能夠恢復執行。
2 notify方法和notifyall方法:
notify方法通知呼叫了wait方法,但是尚未啟用的乙個執行緒進入執行緒排程佇列(即進入鎖競爭),注意不是立即執行。並且具體是哪乙個執行緒不能保證。另外一點就是被喚醒的這個執行緒一定是在等待wait所釋放的鎖。
notifyall方法則喚醒所有呼叫了wait方法,尚未啟用的程序進入競爭佇列。
3 synchronized關鍵字:
第一點:synchronized用來標識乙個普通方法時,表示乙個執行緒要執行該方法,必須取得該方法所在的物件的鎖。
第二點:synchronized用來標識乙個靜態方法時,表示乙個執行緒要執行該方法,必須獲得該方法所在的類的類鎖。
第三點:synchronized修飾乙個**塊。類似這樣:synchronized(obj) 。表示乙個執行緒要執行該**塊,必須獲得obj的鎖。這樣做的目的是減小鎖的粒度,保證當不同塊所需的鎖不衝突時不用對整個物件加鎖。利用零長度的byte陣列物件做obj非常經濟。
jdk 5 還增加了個 lock 介面也可以用於同步
threadlocal也可以執行緒同步
執行緒同步的方法
一 執行緒同步的方法 1 reentrantlock a 加鎖 reentrantlock lock new reentrantlock finally b condition variable condition fund finally 2 synchronized a 加鎖 synchroni...
執行緒同步的方法
wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉interruptedexception異常。notify 喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執...
多執行緒同步方法
今天學習了。用c語言寫的多執行緒程式 同步原來有如此多方法 1.臨界區 臨界區是保證在某乙個時間只有乙個執行緒可以訪問資料的方法。使用它的過程中,需要給各個執行緒提供乙個共享的臨界區物件,無論哪個執行緒占有臨界區物件,都可以訪問受到保護的資料,這時候其它的執行緒需要等待,直到該執行緒釋放臨界區物件為...