Использование «notify ()» и «wait ()» вместо «suspend ()» и «resume ()» для управления потоком

Я пытаюсь узнать, как приостановить и возобновить поток в Java. Я'м, используяApplet тотimplements Runnableимеет 2 кнопкиНачните" а также "Стоп".

public void init(){
  th = new Thread(this);
  th.start();

  btn_increment = new Button("Start");
  btn_increment.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ev){
      th.notify();
    }
  });
  add(btn_increment);

  btn_decrement = new Button("Stop");
  btn_decrement.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ev){
      try{
        th.wait();
      } catch(InterruptedException e) {
        e.printStackTrace();
      }
    }
  });

  add(btn_decrement);                               
}

Метод запуска потока:

public void run(){
  while(true){
    repaint();
    try{
      Thread.sleep(20);
    } catch(InterruptedException e) {
      e.printStackTrace();
    }
  }
}

Теперь, когда я пытаюсь приостановить или возобновить поток, выдается исключение:

Exception in thread "AWT-EventQueue-1" java.lang.IllegalMonitorStateException

Заметки:

Предыдущий код работает отлично, если я использую устаревшие методыsuspend() а такжеresume(), но документация указывает на использованиеnotify() а такжеwait() вместо этого с синхронизацией. Я пытался добавить словоsynchronized кactionPerformed метод, но все равно выдает исключение.

Может кто-нибудь объяснить, пожалуйстаЗАЧЕМ это н'т работает и как решить проблему синхронизации? Немногие объяснения действительно помогут;) Я '

Ответы на вопрос(3)

Ваш ответ на вопрос