Java中的单线程查询



在我的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)循环中实现

最新更新