2013-03-06 20 views
6

我有這樣的編碼。如何擁有物體的顯示器

public class WaitTest { 

    public static void main(String[] args) { 
    Object object = new Object(); 
    try { 
     synchronized (object) { 
     object.wait(5000); 
     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

是否使用同步的(對象)裝置WaitTest類所屬對象的監視器?

+0

主線程是唯一擁有'object'鎖的線程。這些類不能擁有鎖,這些線程可以。 – 2013-03-06 08:23:52

回答

8

類沒有自己的監視器,線程。

在你的例子中,WaitTest不擁有顯示器,主線程。

特別是,沒有其他線程將能夠在同一個對象上輸入​​塊,包括調用任何object的​​方法,如果有任何這樣的方法。

+1

**使用同步(對象)意味着**主線程擁有對象監視器,不是嗎? – bsiamionau 2013-03-06 08:24:14

+0

@zvzdhk:很好,我在閱讀這個問題時沒有發現這種微妙的誤解。 – NPE 2013-03-06 08:25:47

+1

現在好多了。 +1 – bsiamionau 2013-03-06 08:27:57

0

的線程擁有的監視器,並有三種方式將自己的顯示器,根據官方的JDK文檔位置:Object.notify

線程成爲三種方式之一對象監視器的所有者:

  • 通過執行該對象的同步實例方法。
  • 通過執行同步對象的同步語句的主體。
  • 對於Class類型的對象,通過執行該類的同步靜態方法。