如何调用线程在java中的特定时间运行?

时间:2012-07-11 12:18:19

标签: java multithreading timertask

我想让线程在特定的时间执行(例如:2012-07-11 13:12:24和2012-07-11 15:23:45)

我检查了ScheduledExecutorService,但它只支持在第一次运行后的特定时间段后执行,而且我没有任何固定的时间段,而是我有时间从数据库执行任务。

在针对不同问题here的上一个问题中,TimerTask是解决方案,但显然我不能将TimerTask作为RunnableTimerTask两者都有需要实施的方法run。这里的问题是,如果我使线程扩展TimerTask并且有一个run()的实现,那会有用吗? 如果没有,那么我怎么可能做我想做的事情?

3 个答案:

答案 0 :(得分:13)

使用TimerTask。

使用字段变量作为线程创建TimerTask对象。 从Timer任务Run方法调用Thread start。

public class SampleTask extends TimerTask {
  Thread myThreadObj;
  SampleTask (Thread t){
   this.myThreadObj=t;
  }
  public void run() {
   myThreadObj.start();
  }
}

像这样配置。

Timer timer  new Timer();
Thread myThread= // Your thread
Calendar date = Calendar.getInstance();
date.set(
  Calendar.DAY_OF_WEEK,
  Calendar.SUNDAY
);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// Schedule to run every Sunday in midnight
timer.schedule(
  new SampleTask (myThread),
  date.getTime(),
  1000 * 60 * 60 * 24 * 7
);

答案 1 :(得分:4)

我认为你应该更好地使用像Quartz Scheduler这样的库。这基本上是Java的cron实现。

答案 2 :(得分:1)

您是否从java.util.concurrent包中查看了CountDownLatch?它提供倒计时然后触发线程运行。我自己从不需要使用它,但已经使用了几次。