關於線程通信的通俗解釋

線程通信主要分爲以下幾個部分,下面通過生活中圖書館借書的例子簡單講解以下:

  • 通過共享對象通信

    加入圖書館只有一本《java併發編程實戰》,小A早上的時候把這本書給借走了,然後下午小B去圖書館去找這本書,這時候小A和小B是兩個線程,《java併發編程實戰》就是共享對象(類似於多線程中的全局變量的資源),小B發現這本書已經被借走了,所以就回去等了幾天,幾天後,小B又去圖書館發現這本書被還回來了,就把書借走了,這就是通過共享對象進行通信。

  • 忙等待

    由於快要BAT實習生招聘了,所以小B非常想看這本書,所以小B就每隔一個小時(while循環)就去看看這本書有沒有被還回來了,這樣雖然比較耗費處理器資源,但是隻要書一旦被還回來,小B就可以馬上知道。

  • wait() notify() notifyAll()

    由於圖書館隔着宿舍比較近,所以小B發現每隔一個小時就去圖書館身體有點喫不消,不過很快,學校的圖書館系統增加了短信提醒功能(notify()),所以小B可以一邊睡覺一邊等短信。

  • 丟失的信號

    圖書館系統是這麼設計的,當有一本書被還回來的時候,就會給等待者發短信,但是短信只能發送一次,如果沒有等待者,短信也會發出(只不過這個時候沒有沒有接受者),問題出現了,因爲短信只會發一次,當書被還回來的時候,沒有人等待借書,他會發一條空短信,但是之後有等待藉此本書的同學永遠也不會再收到短信,導致這些同學會無休止的等待。爲了解決這個問題,我們要進入等待狀態的時候先打電話問問圖書館阿姨是否需要繼續等待。

  • 假喚醒

    圖書館系統有一個bug,會是不是給用戶發送錯誤短信,我們很聽話,收到短信就會去圖書館借書,但是到達圖書館後發現書根本就沒有被還回來,然後接着做其他的事情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章