回答
監視器是控制併發訪問對象的機制。
這允許你做:
線程1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
線程2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
這防止線程1和2在相同的訪問被監視(同步)部時間。一個會開始,監視器會阻止另一個在第一個完成之前訪問該區域。
這不是一個特殊的對象。它是放置在類層次根目錄下的同步機制:java.lang.Object
。
也有wait
和notify
方法,它們也會使用對象的監視器來進行不同線程之間的通信。
所以我們可以說,當我們創建一個同步方法時,我們正在定義一個對象方法的鎖(監視器)?確切地說, – xdevel2000 2010-07-29 12:29:14
。當你需要一個同步的方法時(我沒有把它放在我的答案中),你正在爲這個方法創建一個監視器。 – 2010-07-29 12:34:11
呃,不完全。無論其他事情如何,每個對象都會自動擁有一個與之關聯的監視器(互斥鎖)。當你聲明一個同步的方法時,你聲明運行時必須在該方法開始執行之前獲得對象監視器上的鎖(並且在控制返回到調用代碼之前必須釋放鎖)。 – 2010-07-29 12:34:16
監視器控制訪問對象的一個是具有一個既鎖一個實體和等候集。在Java中,任何Object
都可以用作監視器。
對於顯示器在Java中如何工作的詳細解釋,我建議你閱讀監控力學Concurrent Programming in Java部分(前面的鏈接會顯示在谷歌圖書預覽,以及部分可用於閱讀)。
正如你所說的「一個監視器是一個實體..」,這是否意味着監視器是一個內部對象/狀態,它擁有/跟蹤鎖和等待設置?如果不是,你能否在這裏詳細說明實體?基本上,當我們的java文檔說'喚醒所有等待在這個對象的監視器上的線程。關於notifyall(),我得到的是對象是維護(在內部實體/對象的幫助下)所有線程都在等待鎖,該內部實體/對象被稱爲監視器? – user3198603 2017-08-14 07:58:35
- 監視器是一種概念/機制,不限於Java語言;
- 「在併發編程中,監視器是一個對象或模塊,旨在被多個線程安全地使用」;
- 正如每位讀者所知道的,Java中的每個對象都是java.lang.Object的子類。 java人以這種方式創建了java.lang.Object,它具有使Java程序員能夠將任何對象用作監視器的特性和特性。例如,每個對象都有一個等待隊列,一個重新進入隊列以及wait和notify方法使其成爲一個監視器;
- 閱讀關於顯示器here。
Java語言和運行時系統通過使用監視器支持線程同步。
監視器與特定的數據項(一個條件變量)關聯,並作爲該數據的鎖。當某個線程持有某個數據項的監視器時,其他線程被鎖定,無法檢查或修改數據。
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
監視器是與相關聯的對象或數據成員,其爲獲得當數據部件或對象是輸入是同步塊(臨界區)和釋放時是退出。
- 1. 什麼是顯示器的區別:框顯示:Flexbox,就在CSS3
- 2. 在Java/Scala中顯示圖像的簡單方法是什麼?
- 3. Java Swing中的控制器是什麼?
- 4. 什麼是Java中的容器
- 5. 什麼是Java中的「記錄器」?
- 6. 爲什麼我的底部div顯示不是以android爲中心,而是在顯示器上顯示?
- 7. 什麼是您最喜愛的log4查看器/顯示器?
- 8. 什麼是Java中
- 9. 什麼是Java中
- 10. 什麼是Java中
- 11. java中'...'是什麼?
- 12. Java - 爲什麼不顯示方法?
- 13. 爲什麼Java Applet不顯示?
- 14. java中的lvmid是什麼?
- 15. 什麼是Java中的StampedLock?
- 16. Java中的.intValue()是什麼?
- 17. 什麼是Java中的eightBitByteArray?
- 18. 什麼是Java中的securitypack.jar?
- 19. 什麼是java中的「String ...」?
- 20. Java中的++ int是什麼?
- 21. 什麼是Java中的StringTokenizer
- 22. 示例中顯示的四次添加寄存器的原因是什麼?
- 23. 什麼是servlet的「顯示名稱」?
- 24. 顯示java.lang.NullPointerException什麼是錯的
- 25. 在Python IDLE中顯示完成什麼 - >是什麼意思?
- 26. Flexbox容器內的子元素的顯示模式是什麼?
- 27. Java(Android) - Json解析器的最佳類示例是什麼?
- 28. 什麼代碼突出顯示libs是否有Java?
- 29. 什麼是獨立的Java解析器?
- 30. 爲什麼url顯示/ ServletName,雖然顯示的是從jsp
+1這讓我讀了如何在JVM級別實現監視器。學到了新的東西 – naikus 2010-07-29 12:24:45
@naikus我期待分享的細節:) – roottraveller 2016-10-16 11:58:54