package org.threadly.concurrent.wrapper.interceptor;
import java.util.ArrayList;
import java.util.List;
import org.threadly.concurrent.PriorityScheduler;
import org.threadly.concurrent.SubmitterSchedulerInterfaceTest;
@SuppressWarnings("javadoc")
public class SubmitterSchedulerTaskInterceptorInterfaceTest extends SubmitterSchedulerInterfaceTest {
@Override
protected SubmitterSchedulerFactory getSubmitterSchedulerFactory() {
return new SubmitterSchedulerTaskInterceptorFactory();
}
@Override
protected boolean isSingleThreaded() {
return false;
}
private static class SubmitterSchedulerTaskInterceptorFactory implements SubmitterSchedulerFactory {
private List<PriorityScheduler> schedulers = new ArrayList<>(1);
@Override
public SubmitterSchedulerTaskInterceptor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) {
return makeSubmitterScheduler(poolSize, prestartIfAvailable);
}
@Override
public SubmitterSchedulerTaskInterceptor makeSubmitterScheduler(int poolSize, boolean prestartIfAvailable) {
PriorityScheduler result = new PriorityScheduler(poolSize);
if (prestartIfAvailable) {
result.prestartAllThreads();
}
schedulers.add(result);
return new SubmitterSchedulerTaskInterceptor(result) {
@Override
public Runnable wrapTask(Runnable task, boolean recurring) {
return task;
}
};
}
@Override
public void shutdown() {
for (PriorityScheduler ps : schedulers) {
ps.shutdownNow();
}
}
}
}