Почему метод notify должен находиться внутри синхронизированного блока?

Рассмотрим следующий код: -

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 () должно означать, чтобы дать сигнал для все потоки ожидают. Тогда почему он должен быть внутри синхронизированного блока?

5
задан adarshr 11 January 2012 в 09:59
поделиться