有没有比使用Thread.sleep()更好的方法呢?

时间:2014-04-20 16:49:47

标签: java multithreading

我有一个线程,在一定的时间间隔后,定期在后台执行某项任务。

但是我想控制线程何时被杀掉,这就是我实现它的方式。

class Task extends Thread { 
  private boolean kill= false,repeat = false;
  public void kill() {
    kill = true;
  }
  public void repeat() {
    repeat = true;
  }
  public void run() {
    do {
      //wait until the required time has elapsed
      while(!isTimeElapsed() && !kill) {
       Thread.sleep(1000);
      }
      if(!kill) {
      //time to work, do stuff
      }
    } while(repeat & !kill);
  }
}

代码按照我的要求工作,但Netbeans通知我说," 在循环中调用Thread.sleep()会导致性能问题"。但它并没有建议一种更好的方式去做我想做的事情。

但是,有没有更好的方法来做我想要的,即让一个线程等待一段固定的时间,但是有可能在我想要的时候杀死线程的灵活性?

2 个答案:

答案 0 :(得分:2)

这将创建一个类的实例并每隔1秒运行一次。

Timer timer = new Timer();
TimerTask myTask = new MyTask();
timer.schedule(myTask,1000,1000);

MyTask需要扩展TimerTask而不是Thread。

答案 1 :(得分:2)

这是一个演示如何使用它们的原始示例:

import java.util.Timer;
import java.util.TimerTask;

public class Greeter {
   private static class SayHello extends TimerTask {
      @Override
      public void run() {
         System.out.println("Hello");
      }
   }
   public static void main(String[] args) throws InterruptedException {
      Timer t = new Timer();
      int delay = 0;
      int period = 1000; // milliseconds
      t.scheduleAtFixedRate(new SayHello(), delay, period);

      Thread.sleep(5000); // Do something

      t.cancel();
   }
}