gpt4 book ai didi

java - ScheduledExecutor服务复用

转载 作者:行者123 更新时间:2023-12-02 08:18:35 24 4
gpt4 key购买 nike

所以,假设我有以下 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()会更合适。

关于java - ScheduledExecutor服务复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com