Проблема прерывания бесконечного потока в Java

#java #multithreading

#java #многопоточность

Вопрос:

Привет всем!

У меня есть поток, который обновляет представление по шаблону Observer. Обновление работает хорошо, но проблема в том, что прерывание не работает. Пожалуйста, помогите.

Главная:

 public class Main {

    public static Sensor s;
    public static Thread t;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        s = new Sensor (1);
         t = new Thread(){

            @Override
            public void run() {

                Random r = new Random ();
               while (!isInterrupted())
               {
                    try {
                       s.setTemp(r.nextInt(40));

                        s.notifyObservers(s.getTemp());
                       sleep(500);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                    }
               }


            }

        };
       JFrame jf = new JFrame();
       jf.setVisible(true);
       s.addObserver(jf);
       t.start();

    }

}
  

Просмотр (кнопка прерывания):

 private void bt_stopActionPerformed(java.awt.event.ActionEvent evt) {                                        
     Main.t.interrupt();
} 
  

Ответ №1:

Когда Thread.sleep() генерируется InterruptedException , ваш interrupted флаг потока устанавливается на false (для Thread.sleep() этого обратитесь к JavaDoc), поэтому вам нужно добавить interrupt() or break в ваше catch предложение.