java - ScheduledExecutor服务复用

标签 java executorservice

所以,假设我有以下 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/

相关文章:

java - 用纯 Java 替换 Akka 调度程序

java - 执行器服务——不阻塞主程序

java - eclipse远程调试

java - 在 Tomcat 中停止 ExecutorService 线程

java - 动态加载类后向 junit 测试套件添加拆卸方法

java - ExecutorService关闭不中断线程

java - ExecutorService shutdownNow 没有关闭 JVM

java - 使用 Apache Poi 从 Excel 创建对象

java - JRE 或平台之间的 java.util.Random 实现是否不同?

java - 来自单线程执行器的 RejectedExecutionException