為什么Wait和notify方法在Object類中
為何 wait,notify 和 notifyAll 屬于 Object 類? 為什么它們不應該在 Thread 類中? 以下觀點我認為是有道理的:
- wait 和 notify 不僅僅是普通方法或同步工具,更重要的是它們是 Java 中兩個執行緒之間的通信機制,
對語言設計者而言, 如果不能通過 Java 關鍵字(例如 synchronized)實作通信此機制,同時又要確保這個機制對每個物件可用, 那么 Object 類則是的合理的宣告位置,
記住同步和等待通知是兩個不同的領域,不要把它們看成是相同的或相關的,同步是提供互斥并確保 Java 類的執行緒安全,而 wait 和 notify 是兩個執行緒之間的通信機制, - 每個物件都可上鎖,這是在 Object 類而不是 Thread 類中宣告 wait 和 notify 的另一個原因,
- 在 Java 中,為了進入代碼的臨界區,執行緒需要鎖定并等待鎖,他們不知道哪些執行緒持有鎖,而只是知道鎖被某個執行緒持有, 并且需要等待以取得鎖, 而不是去了解哪個執行緒在同步塊內,并請求它們釋放鎖,
- Java 是基于 Hoare 的監視器的思想:在Java中,所有物件都有一個監視器,執行緒在監視器上等待,為執行等待,我們需要2個引數:
一個執行緒
一個監視器(任何物件)
在 Java 設計中,執行緒不能被指定,它總是運行當前代碼的執行緒,但是,我們可以指定監視器(這是我們稱之為等待的物件),
這是一個很好的設計,因為如果我們可以讓任何其他執行緒在所需的監視器上等待,這將導致“入侵”,影響執行緒執行順序,導致在設計并發程式時會遇到困難,
請記住,在 Java 中,所有在另一個執行緒的執行中造成入侵的操作都被棄用了(例如 Thread.stop 方法),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/228108.html
標籤:其他
上一篇:分享BigDecimal的用法與MySQL算術運算子
下一篇:C常用字串模擬、記憶體重疊問題
