2016-01-30 48 views
0

我知道這個話題已經在很多地方討論過了。但是他們都在談論它在多線程環境中的使用。通知受限於同步構造

在以下示例中,爲什麼notify()應該被​​包圍?當關鍵字被使用時,它應該做的事情是徒勞的。但爲什麼例外,java.lang.IllegalMonitorStateException,當它不使用?

public class HelloWorld { 
    public static void main(String[] args) { 
     ABC c = new ABC(); 
     c.put(0); 
    } 
} 
class ABC { 
    public synchronized void put(int value) { // why synchronized now! 
     System.out.println("Put: " + value); 
     notify(); 
    } 
} 
+0

'notify()'在單線程環境中沒有用處。 –

+0

http://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block – FaNaJ

回答

0

你應該使用​​是因爲鎖是re-entrant,這意味着它可以由同一個線程來獲得多次。 換句話說,如果你的線程已經擁有一個對象的鎖定,它不必等待它自己。