java - 在 Java 中中断无限线程的问题

标签 java multithreading

大家好!

我有一个线程更新观察者模式的 View 。更新运行良好,但问题是中断不起作用。请帮忙。

主要内容:

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();
} 

最佳答案

Thread.sleep() 抛出 InterruptedException 时,您的 interrupted 线程标志设置为 false (请引用 JavaDoc 中的 Thread.sleep()),因此您需要在 catch 中添加 interrupt()break 子句。

关于java - 在 Java 中中断无限线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693392/

相关文章:

java - HelloWorldSWT eclipse 的运行时问题

java - HttpServletRequest.getInputStream() 不解包分块 HTTP 请求

java - 执行executeQuery时结果集始终为空

asp.net - ASP.NET 如何实现多线程?

c++ - 将数组传递给线程

java - 转储不带模式的 Avro 字节

java - Java 运行时如何映射到目标

java - 如何处理BlockingQueue的InterruptedException?

c - 使现有的 ANSI C 代码线程安全和可重入

c# - 如何处理后台线程上的事件?