ScheduledExecutorService的重用

所以,让我们说我有以下的ScheduledExecutorService

public class Foo { private ScheduledExecutorService exec; public Foo() { exec = Executors.newScheduledThreadPool(NUM_OF_TASKS); } public void executeOnce() { exec.schedule(new Runnable(){ @Override public void run() { Foo.this.doSomething(); }}, DELAY, TimeUnit.MILLISECONDS); } }

现在, exec用于执行周期性的任务(例如目录轮询,和等等)。 但是,有这样一个任务(即executeOnce即执行一次),但需要一个延迟 。 所以,我选择了使用exec来执行这个任务,但是这是好的设计? 相反,我应该已经创建了一个newSingleThreadExecutor ,并随后被称为shutdown ? 例如,

public void executeOnce() { // Execute task and wait 'til completion ExecutorService exec = Executors.newSingleThreadExecutor(); try { exec.submit(new Runnable(){ @Override public void run() { try { Thread.sleep(DELAY); } catch (InterruptedException e) { } Foo.this.doSomething() } }).get(); } catch (InterruptedException e) { } catch (ExecutionException e) { } // Shutdown executor service exec.shutdownNow(); }

有没有实施任何一种好处

--------------解决方案-------------

如果常规任务和一次性的任务在某种程度上是相关的经常任务的调度不是关键,在其执行的(可能)延迟是一个问题,那么我只需执行一次任务在同一个执行者。

使用单独的遗嘱执行人的好处是,常规任务计划为无干扰。 然而shutdownNow() 几乎肯定不会在这里了预期的效果,简单的shutdown()会更合适。

如果EXEC为其他任务重复使用,最初的片令我更优雅。 线程的创建是一个不平凡的任务,甚至可运行只执行一次,线程一般的做法是creaate一个线程池,并在他们扔可运行。 让生活更轻松,集中线程池,等等。

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.629 (s). 10 q(s)