0

我从上一个问题中得到了答案。但是现在我在做完我的事情一分钟后就无法使用和停止线程。我实际上想在做完我的事情后一分钟后关闭/停止线程。所以,我很困惑:我该如何使用:

public class Frame2 extends javax.swing.JFrame implements Runnable{
    public Frame2() {
        initComponents();
    }

    public void run(){
        long startTime = System.currentTimeMillis();
        while (( System.currentTimeMillis() - startTime ) < 1000) {        
            System.out.print("DOING MY THINGS");
        }
    }
}

问题是它根本不起作用,当我关闭包含此线程的框架时,代码行

    System.out.print("DOING MY THINGS");

在无限循环中工作。

提前致谢。

4

1 回答 1

3

当我关闭包含此线程的框架时

框架不包含线程。Frame 可以对其进行引用。但是线程本身将一直运行,直到它的执行完成(run方法结束),而不是一秒钟。

你不能只是“停止”线程。它必须始终完成它的执行(再次,run方法结束)。

您编写的代码应该运行良好,并在 60 秒内停止编写内容。如果您希望它在关闭框架时终止,您应该添加一些变量来检查并true在您希望线程终止时写入它。

例子:

private volatile boolean terminated = false;

public void run(){
  long startTime = System.currentTimeMillis();
  while (!terminated && System.currentTimeMillis() < startTime + 60000) {
    System.out.print("DOING MY THINGS");
    // here I want to do my things done in just one minute
    // and after that I want to stop the thread at will!
  }
}

public void stop() {
  terminated = true;
}
于 2013-05-09T07:18:43.010 回答