執行緒間的通訊

2021-10-11 18:55:36 字數 955 閱讀 4491

當前實現執行緒間通訊有兩種方式,一種是object物件中的wait和notify機制,另一種是reentrantlock和condition配合的await和signal機制,下面分別進行闡述。

方法wait的作用是使當前執行**的執行緒進行等待,wait方法是object類的方法,該方法用來將當前執行緒置入「預執行佇列」中,並在wait所在的**行處停止執行,直到接到通知或被中斷為止。在呼叫wait前,該執行緒必須獲得該物件的物件級別鎖,即只有在同步方法或者同步塊中呼叫wait方法。在執行wait方法後,當前執行緒釋放鎖。在從wait返回前,當前執行緒和其他執行緒競爭重新獲得鎖。

方法notify也要在同步塊中呼叫,即在呼叫前,執行緒也必須獲得該物件的物件級別鎖,否則會丟擲illegalmonitorstateexception。該方法用來通知那些等待該物件的物件級別鎖的其他執行緒,如果有多個執行緒,則由執行緒規劃器隨機挑選出其中乙個呈wait狀態的執行緒,對其發出通知notify,並使他等待獲取該物件的物件鎖。(在執行notify後,當前執行緒並不會馬上釋放該物件鎖,呈wait狀態的也不能馬上獲取該物件鎖,要等到notify方法的執行緒將程式執行完,也就是退出synchronized**塊後,當前執行緒才會釋放鎖)。

通過呼叫wait方法可以使處於臨界區內的執行緒進入等待狀態,同時釋放被同步物件的鎖。而notify操作可以喚醒乙個因呼叫了wait操作而處於阻塞狀態中的執行緒,使其進入就緒狀態。

這裡以兩個執行緒交替列印英文本元和數字的為例進行說明。

private static void alternatetask() 

} catch (exception e) finally

});thread thread2 = new thread(() ->

} catch (exception e) finally

});thread1.start();

thread2.start();

}

執行緒間的通訊

執行緒間的通訊 簡單說明 執行緒間通訊 在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 06 nsthread04 執行緒間通訊 impo...

執行緒間的通訊

1.執行緒間的通訊 多個執行緒處理同乙個資源,但處理的動作卻不同 2.執行緒間的有效通訊 使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行 3.條件 3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的...

執行緒間的通訊

常用的 wait notify notifyall 在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒 使用wait notify notifyall 時,塊必須上鎖 author fzz public class communicate catch interruptedexception e sys...