简体   繁体   中英

How works ScheduledExecutorService if call scheduleWithFixedDelay method more times than pool size?

In this code I create ScheduledExecutorService with pool of 5 threads and call scheduleWithFixedDelay method 5 tims. It will create 5 schedulers and each scheduler will call testBean::test every secons:

@PostConstruct
public void hz() {
    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5, new ThreadPoolTaskScheduler());
    for (int i = 0; i < 5; i++) {
        scheduledExecutorService.scheduleWithFixedDelay(testBean::test, 1, 1, TimeUnit.SECONDS);
    }
}

But I have somw questions.

  1. Do I understand correctly that ScheduledExecutorService just java interface and ThreadPoolTaskScheduler() - is spring i,plementation?

  2. Does it exist spring analog instead ScheduledExecutorService ?

  3. The most important question . What happens if I try to call the scheduleWithFixedDelay method more times than the pool in ScheduledExecutorService (for example 9)?:

 @PostConstruct public void hz() { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5, new ThreadPoolTaskScheduler()); for (int i = 0; i < 9; i++) { scheduledExecutorService.scheduleWithFixedDelay(testBean::test, 1, 1, 

TimeUnit.SECONDS); } }

The short answer is that any scheduled task you submit gets priority queued (based on the time when its supposed to run) in the global queue of your thread pool. The individual threads then pick up the tasks and execute them in order. So, in your case, at t=1, the 5 threads in the pool will pick 5 items from the queue and execute them in parallel. As they complete the execution, next 4 items will get picked at time=(1 + time it takes to execute your callback function). So, unless your call back function hogs the thread for few seconds, all the 9 scheduled tasks should execute approximately at t=1.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM