Итак, допустим, у меня есть следующее 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();
}
Есть ли преимущества , реализующие последнее?