1

我有一个 JButton 来调用我的线程。但我真正想做的是在一分钟后停止线程!我的 actionListener 方法是:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    new Frame2().setVisible(true);
    Thread t=new Thread(new Frame2());

    t.start();
    }    

我只运行一分钟的线程如下:

    public void run(){
    int i;
    while(!Thread.currentThread().isInterrupted()){
        for(i=0;i<=100;i++){

            if(i==100){
            Thread.currentThread().interrupt();
             }
        try {
            Thread.currentThread().sleep(600);
        } catch (InterruptedException ex) {
            System.out.print("THREAD CLOSED");
           return;
        }

    }
        System.out.print("DOING THINGS BLA BLA");
    }

}    

问题: 我在一分钟后成功停止了线程,但我无法在其中做任何想做的事情。我只想知道我怎样才能做到这一点,以便只运行线程一分钟并且在线程内部我想做我的事情!但是怎么做?我对这种方法有错吗?如果是,那么正确的方法应该是什么?

4

2 回答 2

4

做你想做的最简单的方法是有如下的东西:

public void run() {
    long startTime = System.currentTimeMillis();
    while (System.currentTimeMillis() < startTime + 60000) {
        // do something useful
    }
}

“做一些有用的事情”应该是一个快速的操作,你的线程总是会持续略长于1分钟(1分钟+“做一些有用的事情”的时间)。

请注意您的原始代码:要从线程本身停止线程,不需要中断:您只需要从run()方法返回。

于 2013-05-09T06:41:38.217 回答
2

为确保您的线程可以工作 1 分钟,您需要为此创建单独的线程。

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   new Frame2().setVisible(true);
   final Thread t=new Thread(new Frame2());

   t.start();
   new Thread(new Runnable() {
     @Override
     public void run() {
       TimeUnit.SECONDS.sleep(1);
       t.interrupt();
     }
   }).start();
 }   

现在无论你的“t”线程在做什么,它都会在 1 分钟后被杀死。

于 2013-05-09T06:47:39.813 回答