日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?

發布時間:2025/3/21 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Yujiaao

來源:segmentfault.com/a/1190000019962661

一個較難回答的 Java 問題, Java 編程語言又不是你設計的,你如何回答這個問題呢?需要對 Java 編程的常識進行深入了解才行。

這個問題的好在它能反映面試者是否對 wait - notify 機制有沒有了解, 以及他相關知識的理解是否明確。就像為什么 Java 中不支持多繼承或者為什么 String 在 Java 中是?final?的問題一樣,這個問題也可能有多個答案。

為什么在 Object 類中定義 wait 和 notify 方法,每個人都能說出一些理由。

從我的面試經驗來看, wait 和 nofity 仍然是大多數Java 程序員最困惑的,特別是2到3年的開發人員,如果他們要求使用 wait 和 notify, 他們會很困惑。

因此,如果你去參加 Java 面試,請確保對 wait 和 notify 機制有充分的了解,并且可以輕松地使用 wait 來編寫代碼,并通過“生產者-消費者”問題或實現阻塞隊列等了解通知的機制。

為什么等待和通知需要從同步塊或方法中調用, 以及 Java 中的 wait,sleep 和 yield 方法之間的差異,如果你還沒有讀過相關知識,一定要看看。

為何 wait,notify 和 notifyAll 屬于 Object 類? 為什么它們不應該在 Thread 類中? 以下觀點我認為是有道理的:

1) wait 和 notify 不僅僅是普通方法或同步工具,更重要的是它們是 Java 中兩個線程之間的通信機制。

對語言設計者而言, 如果不能通過 Java 關鍵字(例如 synchronized)實現通信此機制,同時又要確保這個機制對每個對象可用, 那么 Object 類則是的合理的聲明位置。

記住同步和等待通知是兩個不同的領域,不要把它們看成是相同的或相關的。同步是提供互斥并確保 Java 類的線程安全,而 wait 和 notify 是兩個線程之間的通信機制。

2) 每個對象都可上鎖,這是在 Object 類而不是 Thread 類中聲明 wait 和 notify 的另一個原因。

3) 在 Java 中,為了進入代碼的臨界區,線程需要鎖定并等待鎖,他們不知道哪些線程持有鎖,而只是知道鎖被某個線程持有, 并且需要等待以取得鎖, 而不是去了解哪個線程在同步塊內,并請求它們釋放鎖。

4) Java 是基于 Hoare 的監視器的思想:

http://en.wikipedia.org/wiki/Monitor_%28synchronization%29

在Java中,所有對象都有一個監視器。

線程在監視器上等待,為執行等待,我們需要2個參數:

  • 一個線程

  • 一個監視器(任何對象)

在 Java 設計中,線程不能被指定,它總是運行當前代碼的線程。但是,我們可以指定監視器(這是我們稱之為等待的對象)。

這是一個很好的設計,因為如果我們可以讓任何其他線程在所需的監視器上等待,這將導致“入侵”,影響線程執行順序,導致在設計并發程序時會遇到困難。

請記住,在 Java 中,所有在另一個線程的執行中造成入侵的操作都被棄用了(例如 Thread.stop 方法)。

總結

以上是生活随笔為你收集整理的为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。