package org.warp.commonutils.concurrency.executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class TestScheduledTaskLifecycle { @Test public void testScheduledTaskLifecycle() throws InterruptedException { var scheduler = Executors.newScheduledThreadPool(100); var lifecycle = new ScheduledTaskLifecycle(); AtomicInteger runningTasks = new AtomicInteger(); for (int i = 0; i < 49; i++) { lifecycle.registerScheduledTask(scheduler.scheduleAtFixedRate(() -> { lifecycle.startScheduledTask(); runningTasks.incrementAndGet(); try { Thread.sleep(33); } catch (InterruptedException e) { e.printStackTrace(); } finally { runningTasks.decrementAndGet(); lifecycle.endScheduledTask(); } }, 0, 1, TimeUnit.MICROSECONDS)); } Thread.sleep(96); lifecycle.cancelAndWait(); System.out.println("stopped"); Assertions.assertEquals(0, runningTasks.get()); } }