2013-03-06 9 views
6

Mam takie kodowanie.Jak założyć monitor obiektu?

public class WaitTest { 

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

Czy używając zsynchronizowany (Object) oznacza klasa WaitTest jest posiadanie monitora obiektu?

+0

Główny wątek jest jedynym, który posiada blokadę obiektu. Klasy nie mogą posiadać blokad, wątki mogą. –

Odpowiedz

8

Klasy nie mają własnych monitorów, wątków.

W twoim przykładzie WaitTest nie jest właścicielem monitora, robi to główny wątek.

W szczególności, żaden inny gwint będzie mógł wprowadzić synchronized bloku na tym samym obiekcie, w tym wywołanie któregokolwiek z object jest synchronized sposobami, gdyby wszystkie takie sposoby.

+1

** przy użyciu zsynchronizowanego (obiektu) oznacza **, że główny wątek jest właścicielem monitora obiektów, prawda? – bsiamionau

+0

@zvzdhk: Dobry połów, nie zauważyłem tego subtelnego nieporozumienia podczas czytania pytania. – NPE

+1

Teraz jest znacznie lepiej. +1 – bsiamionau

0

Nić posiada monitor, a istnieją trzy sposoby do własnego monitora, zgodnie z oficjalnym dokumencie JDK tu: Object.notify

Wątek staje się właścicielem monitorze obiektu w jeden z trzech sposobów:

  • Wykonując metodę synchronizacji instancji tego obiektu.
  • Wykonując treść synchronizowanej instrukcji synchronizującej obiekt.
  • Dla obiektów typu Class, wykonując zsynchronizowaną metodę statyczną dla tej klasy.
Powiązane problemy