Рассмотрим следующий код: -
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
}
}
}
Другой класс ожидает экземпляра этого класса, получив блокировку на нем внутри синхронизированного блока. Но если я не сохраню код в методе выполнения в синхронизированном блоке, то я получу IllegalMonitorStateException
.
notify ()
должно означать, чтобы дать сигнал для все потоки ожидают. Тогда почему он должен быть внутри синхронизированного блока?