在我的Java main方法中,需要为任务生成单个线程。 该线程执行任务并休眠30秒。反复。
就我而言,使用Java执行器框架线程池可能是一种开销。 因此想到产生一个单一的线程。有什么意见吗?
答案 0 :(得分:2)
您可以使用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]。
答案 1 :(得分:0)
如果你想每30秒执行一次任务,那么我觉得Timer是最好的选择。 Timer将使用单个线程执行任务,您可以定期安排任务。
Timer timer = new Timer();
timer.schedule(task, 30 * 1000);
我希望这会对你有所帮助。
答案 2 :(得分:0)
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
}
}
如果您不想使用Executors。你可以做一些像Thread.sleep(30000);在Run()
方法的while(true)循环中实现该目标。