は、次のコードを考えてみましょう: -notifyメソッドがsynchronizedブロック内にあるのはなぜですか?
class CalculateSeries implements Runnable{
int total;
public void run(){
synchronized(this){ // *LINE 1*
for(int i = 1; i <= 10000; i++) {
total += i;
}
notify(); //Notify all the threads waiting on this instance of the class to wake up
}
}
}
別のクラスは、同期ブロック内でその上にロックを取得することによって、このクラスのインスタンスを待っています。しかし、コードを同期化されたブロックでrunメソッドに保持しないと、IllegalMonitorStateException
が返されます。
notify()
は、待機しているすべてのスレッドにシグナルを与えることを意味します。ではなぜそれが同期化されたブロック内にあるべきですか?
notifyは、待機中のすべてのスレッドに通知しません。 ** 1 **スレッド待ちを通知します。 –
@JBNizetはい。それは本当だ。 notifyは、すべての適格なスレッドのうちの1つだけに通知します。 – whitehat