in surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/ParallelComputerBuilder.java [441:481]
private Runner setSchedulers(ParentRunner suiteSuites, ParentRunner suiteClasses) throws InitializationError {
int parallelSuites = allGroups.get(SUITES);
int parallelClasses = allGroups.get(CLASSES);
int parallelMethods = allGroups.get(METHODS);
int poolSize = totalPoolSize();
ExecutorService commonPool = splitPool || poolSize == 0 ? null : createPool(poolSize);
master = createMaster(commonPool, poolSize);
if (suiteSuites != null) {
// a scheduler for parallel suites
if (commonPool != null && parallelSuites > 0) {
Balancer balancer = BalancerFactory.createBalancerWithFairness(parallelSuites);
suiteSuites.setScheduler(createScheduler(null, commonPool, true, balancer));
} else {
suiteSuites.setScheduler(createScheduler(parallelSuites));
}
}
// schedulers for parallel classes
ArrayList<ParentRunner> allSuites = new ArrayList<>(suites);
allSuites.addAll(nestedSuites);
if (suiteClasses != null) {
allSuites.add(suiteClasses);
}
if (!allSuites.isEmpty()) {
setSchedulers(allSuites, parallelClasses, commonPool);
}
// schedulers for parallel methods
ArrayList<ParentRunner> allClasses = new ArrayList<>(classes);
allClasses.addAll(nestedClasses);
if (!allClasses.isEmpty()) {
setSchedulers(allClasses, parallelMethods, commonPool);
}
// resulting runner for Computer#getSuite() scheduled by master scheduler
ParentRunner all = createFinalRunner(removeNullRunners(
Arrays.<Runner>asList(suiteSuites, suiteClasses, createSuite(notParallelRunners))));
all.setScheduler(master);
return all;
}