package de.skuzzle.polly.tools.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import de.skuzzle.polly.tools.Check; public final class Parallel { private final static Object LOCK = new Object(); private volatile static ExecutorService executor; static { executor = Executors.newSingleThreadExecutor( new ThreadFactoryBuilder("PARALLEL_%n%")); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { executor.shutdown(); } })); } public static void setExecutor(ExecutorService executor) { Check.objects(executor).notNull(); synchronized (LOCK) { Parallel.executor.shutdown(); Parallel.executor = executor; } } public static void run(Runnable r) { synchronized (LOCK) { Parallel.executor.execute(r); } } }