package org.threadly.concurrent.wrapper.compatibility;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import org.threadly.concurrent.SubmitterExecutor;
import org.threadly.concurrent.SubmitterScheduler;
import org.threadly.concurrent.SubmitterSchedulerInterfaceTest;
@SuppressWarnings("javadoc")
public class ScheduledExecutorServiceWrapperTest extends SubmitterSchedulerInterfaceTest {
@Override
protected SubmitterSchedulerFactory getSubmitterSchedulerFactory() {
return new SchedulerFactory();
}
@Override
protected boolean isSingleThreaded() {
return false;
}
private class SchedulerFactory implements SubmitterSchedulerFactory {
private final List<ScheduledThreadPoolExecutor> executors;
private SchedulerFactory() {
executors = new ArrayList<>(1);
}
@Override
public SubmitterExecutor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) {
return makeSubmitterScheduler(poolSize, prestartIfAvailable);
}
@Override
public SubmitterScheduler makeSubmitterScheduler(int poolSize, boolean prestartIfAvailable) {
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(poolSize);
if (prestartIfAvailable) {
executor.prestartAllCoreThreads();
}
executors.add(executor);
return new ScheduledExecutorServiceWrapper(executor);
}
@Override
public void shutdown() {
Iterator<ScheduledThreadPoolExecutor> it = executors.iterator();
while (it.hasNext()) {
it.next().shutdown();
it.remove();
}
}
}
}