一分钟后立即停止线程

时间:2013-05-09 06:28:58

标签: java multithreading for-loop interrupt interrupt-handling

我有一个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");
    }

}    

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

2 个答案:

答案 0 :(得分:4)

做你想做的事的最简单方法是拥有如下内容:

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

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

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

答案 1 :(得分: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分钟后被杀死。