JAVA——多線程編程之同步“監視器monitor”(三),多線程編程monitor

來源:互聯網
上載者:User

JAVA——多線程編程之同步“監視器monitor”(三),多線程編程monitor

  • 轉載來源:
    • http://www.programcreek.com/2011/12/monitors-java-synchronization-mechanism/
    • http://ifeve.com/monitors-java-synchronization-mechanism/
  • 監視器是作業系統實現同步的重要基礎概念,同樣它也用在JAVA的線程同步中,這篇文章用一種類推的思想解釋監視器”monitor”。
【1】什麼是監視器
  • 監視器可以看做是經過特殊布置的建築,這個建築有一個特殊的房間,該房間通常包含一些資料和代碼,但是一次只能一個消費者(thread)使用此房間。
  • 當一個消費者(線程)使用了這個房間,首先他必須到一個大廳(Entry Set)等待,發送器將基於某些標準(e.g.FIFO)將從大廳中選擇一個消費者(線程),進入特殊房間,如果這個線程因為某些原因被“掛起”,它將被發送器安排到“等待房間”,並且一段時間之後會被重新分配到特殊房間,按照上面的線路,這個建築物包含三個房間,分別是“特殊房間”、“大廳”以及“等待房間”。
  • 簡單來說,監視器用來監視線程進入這個特別房間,他確保同一時間只能有一個線程可以訪問特殊房間中的資料和代碼。
【2】JAVA中監視器的實現
  • 在JAVA虛擬機器中,每個對象(Object和class)通過某種邏輯關聯監視器,為了實現監視器的互斥功能,每個對象(Object和class)都關聯著一個鎖(有時也叫“互斥量”),這個鎖在作業系統書籍中稱為“訊號量”,互斥(“mutex”)是一個二進位的訊號量。
  • 如果一個線程擁有了某些資料的鎖,其他的線程則無法獲得鎖,直到這個線程釋放了這個鎖。在多線程中,如果任何時候都是我們自己來寫這個訊號量,顯然不是很方便,幸運的是,JVM為我們自動實現了這些。
  • 為了使資料不被多個線程訪問,java 提供了同步塊 以及同步方法兩種實現,一旦一段代碼被嵌入到一個synchronized關鍵字中,意味著放入了監視地區,JVM在後台會自動為這段代碼實現鎖的功能。
【3】JAVA的同步代碼中,哪一部分是監視器?
  • 我們知道JAVA每個對象(Object/class)都關聯一個監視器,更好的說法應該是每個對象(Object/class)都有一個監視器,對象可以有它自己的臨界區,並且能夠監視線程式列為了使線程協作,JAVA為提供了wait()和notifyAll以及notify()實現掛起線程,並且喚醒另外一個等待的線程,此外這些方法有三種不同版本:
wait(long timeout, int nanos)wait(long timeout) notified by other threads or notified by timeout.notify(all)
  • 這些方法只能在一個同步塊或同步方法中被調用,原因是,如果一個方法不需要相互排斥,不需要監測或線程之間協作,每一個線程可以自由訪問此方法,那就不需要協作。

  • 在監視器(Monitor)內部,是如何做線程同步的?

    • 監視器和鎖在Java虛擬機器中是一塊使用的。監視器監視一塊同步代碼塊,確保一次只有一個線程執行同步代碼塊。每一個監視器都和一個對象引用相關聯。線程在擷取鎖之前不允許執行同步代碼。
  • 監視器的其他相關知識,網址:

    • http://wangym.iteye.com/blog/1265973
    • http://blog.csdn.net/lirx_tech/article/details/50913520
    • https://zhidao.baidu.com/question/2266270659590811188.html
    • Java同步機制之Monitor監視器與syncrhoized實現原理:http://www.cnblogs.com/ygj0930/p/6561667.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.