2017-04-13 2 views
1

Wenn ich so etwas wie diesesVerlässt ein Thread nach dem Blockieren alle synchronisierten Methoden oder Objekte?

synchronized void doSomething() throws Exception { 
    synchronized (lock1) { 
     lock1.wait(); 
    } 
    wait(); 
} 

Sobald es blockiert bei lock1.wait(), werden einige andere Thread können doSomething() zugreifen und sie funktionieren?

Was passiert, wenn der blockierte Thread signalisiert wird und wieder Zugang zur Methode erhält? wird es auf wait() blockieren oder nicht?

+0

Beachten Sie, dass dies nicht berücksichtigt, dass wakeups auftreten können. Siehe https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-- – Fildor

Antwort

1

Nein, wait() ruft die Sperre für das Objekt, das Sie anrufen, nur wait() auf. Im Beispielcode wird die Sperre auf lock1 freigegeben, aber die Sperre auf this wird immer noch vom Thread gehalten.

Verwandte Themen