一分钟后立即停止线程

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

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

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

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

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

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

为了确保您的线程能够工作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分钟后被杀死。