Использование «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
метод, но все равно выдает исключение.
Может кто-нибудь объяснить, пожалуйстаЗАЧЕМ это н'т работает и как решить проблему синхронизации? Немногие объяснения действительно помогут;) Я '