blob: 8a997ecaabc1098d62013d55a2aca73d26d19aea [file] [log] [blame]
package org.apache.maven.surefire.junitcore.pc;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.surefire.api.report.ConsoleStream;
import org.apache.maven.surefire.api.util.internal.DaemonThreadFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
/**
* The factory of {@link SchedulingStrategy}.
*
* @author Tibor Digana (tibor17)
* @since 2.16
*/
public class SchedulingStrategies
{
private static final ThreadFactory DAEMON_THREAD_FACTORY = DaemonThreadFactory.newDaemonThreadFactory();
/**
* @param logger current error logger
* @return sequentially executing strategy
*/
public static SchedulingStrategy createInvokerStrategy( ConsoleStream logger )
{
return new InvokerStrategy( logger );
}
/**
* @param logger current error logger
* @param nThreads fixed pool capacity
* @return parallel scheduling strategy
*/
public static SchedulingStrategy createParallelStrategy( ConsoleStream logger, int nThreads )
{
return new NonSharedThreadPoolStrategy( logger,
Executors.newFixedThreadPool( nThreads, DAEMON_THREAD_FACTORY ) );
}
/**
* @param logger current error logger
* @return parallel scheduling strategy with unbounded capacity
*/
public static SchedulingStrategy createParallelStrategyUnbounded( ConsoleStream logger )
{
return new NonSharedThreadPoolStrategy( logger, Executors.newCachedThreadPool( DAEMON_THREAD_FACTORY ) );
}
/**
* The <tt>threadPool</tt> passed to this strategy can be shared in other strategies.
* <br>
* The call {@link SchedulingStrategy#finished()} is waiting until own tasks have finished.
* New tasks will not be scheduled by this call in this strategy. This strategy is not
* waiting for other strategies to finish. The {@link org.junit.runners.model.RunnerScheduler#finished()} may
* freely use {@link SchedulingStrategy#finished()}.
*
* @param logger current error logger
* @param threadPool thread pool possibly shared with other strategies
* @return parallel strategy with shared thread pool
* @throws NullPointerException if <tt>threadPool</tt> is null
*/
public static SchedulingStrategy createParallelSharedStrategy( ConsoleStream logger, ExecutorService threadPool )
{
if ( threadPool == null )
{
throw new NullPointerException( "null threadPool in #createParallelSharedStrategy" );
}
return new SharedThreadPoolStrategy( logger, threadPool );
}
}