一、synchronized關鍵字
j**a中的每乙個物件都可以作為鎖。具體表現為以下3種形式。
基於進入和退出monitor對線實現方法同步和**塊同步。
synchronized對於同步塊的實現使用了monitorenter和monitorexit指令,而同步方法則是依靠方法修飾符上的acc_synchronized來完成的。
方法名稱
描述notify()
通知乙個在物件上等待的執行緒,使其從wait()返回,返回的前提是該物件獲取到物件的鎖
notifyall()
通知所有等待在該物件上的執行緒
wait()
執行緒進入waiting狀態,等待通知或被中斷才會返回,wait()會釋放物件的鎖
wait(long)
超時等待一段時間,單位毫秒,收到通知或者超時就會返回
wait(long,int)
對超時時間更細粒度的控制,可達到納秒
三、經典正規化
等待方遵循如下原則。
1)獲取物件的鎖。
2)如果條件不滿足,那麼呼叫物件的wait()方法,被通知後仍要檢查條件。
3)條件滿足則執行對應的邏輯。
通知方遵循如下原則。
1)獲得物件的鎖。
2)改變條件。
3)通知所有等待在物件上的執行緒。
----摘自《併發程式設計的藝術》
執行緒間通訊
執行緒間通訊 多個執行緒在操作統一資源,但各個執行緒操作的動作不同。資源 class res class input implements runnable public void run else x x 1 2 class output implements runnable public vo...
執行緒間通訊
執行緒間的通訊 在乙個多執行緒的應用程式中,所有執行緒共享程序資源,協同工作。所以,執行緒之間的通訊是編寫多執行緒 應用的必不可少的環節。執行緒之間的通訊包括互斥 同步等,它是多 執行緒設計中最難控制的部分,也是關鍵部分。執行緒間的互斥 1 臨界區 在乙個多執行緒 的應用程式中,可能存在這樣的危險 ...
執行緒間通訊
執行緒間通訊 其實就是多個執行緒在操作同乙個資源 但是操作的動作不同。等待喚醒機制 wait notify 0 notifyall 都使用在同步中,因為要對持有監視器 鎖 的執行緒操作。所以要使用在同步中,因為只有同步才具有鎖 為什麼這些操作執行緒的方法要定義object類中呢?因為這些方法在操作同...