ScheduledExecutorService及其调度方法。怎么运行的?

时间:2018-12-11 21:55:40

标签: java concurrency scheduled-tasks executorservice threadpoolexecutor

我有这样的代码:

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
    for (int i = 0; i < 20; i++) {
        scheduledExecutorService.schedule(() ->
                System.out.println("Hello" + Thread.currentThread().getName()), 20, TimeUnit.SECONDS);
    }
    scheduledExecutorService.schedule(() ->
            System.out.println("Hello first " + Thread.currentThread().getName()), 5, TimeUnit.SECONDS);

    scheduledExecutorService.shutdown();

我正在调试此代码,但使Thread.start()方法仅执行一次的方法感到惊讶。 当我执行此调度方法时,线程会怎样?是处于等待状态还是被阻止状态,还是其他位置?

1 个答案:

答案 0 :(得分:0)

Executors.newScheduledThreadPool创建一个具有固定线程数的线程池:

  

创建一个线程池,该线程池可以安排命令在给定的延迟后运行或定期执行。

     

参数:   corePoolSize-即使处于空闲状态也要保留在池中的线​​程数。

所有计划在此执行程序服务实例中执行的任务都将在单个线程中处理。

  

问:执行此调度方法时,线程会发生什么情况?是处于等待状态还是被阻止状态,还是其他位置?

线程正在等待新任务执行,并且可能根据线程池的配置而终止-请参见ThreadPoolExecutor.getTask()