在我的Java主方法中,需要为一个任务生成一个线程。线程执行任务并休眠30秒。反复.
在我的例子中,使用Java执行器框架线程池可能是一个开销。因此考虑生成单个线程。任何评论?
您可以使用Java 5中引入的ScheduledExecutorService,它适合您的目的,并且也使用ThreadPool。
public static void main(String[] args) {
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ":" + Calendar.getInstance().getTime());
}
}, 0, 30, TimeUnit.SECONDS);
}
输出:pool-1-thread-1:Fri Aug 22 09:56:50 IST 2014
pool-1-thread-1:Fri Aug 22 09:57:20 IST 2014
pool-1-thread-1:Fri Aug 22 09:57:50 IST 2014
pool-1-thread-1:Fri Aug 22 09:58:20 IST 2014
同时,ScheduledExecutorService优于Timer [StackOverFlow Discussion On Timer Vs ScheduledExecutorService].
如果你想每30秒执行一些任务,那么Timer是我认为最好的选择。Timer将使用单个线程来执行任务,您可以定期调度任务。
Timer timer = new Timer();
timer.schedule(task, 30 * 1000);
希望这对你有帮助。
ScheduledExecutorService可以创建一个单线程执行器,该执行器可以安排命令在给定延迟后运行,或定期执行,这应该适合您,并且开销很小。
ScheduledExecutorService executor= Executors.newSingleThreadScheduledExecutor;
//do your work evry 30 seconds,and you could define the delayed time to start
executor.scheduleAtFixedRate(new CustomeTask(), YOUR_DELAY_TIME, 30, TimeUnit.SECONDS);
private static class CustomeTaskimplements Runnable {
@Override
public void run() {
//Do any work you want
}
}
如果您不想使用执行器。你可以这样做:Thread.sleep(30000);在Run()
方法的while(true)循环中实现