Mercurial > hg > Papers > 2021 > riono-sigos
view Paper/src/ThreadPoolExecutor.java @ 16:c65256380a80
update
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 05 May 2021 14:57:28 +0900 |
parents | |
children |
line wrap: on
line source
public class PriorityThreadPoolExecutors { public static ThreadPoolExecutor createThreadPool(int nThreads, int keepAliveTime) { return new PriorityThreadPoolExecutor(nThreads, nThreads, keepAliveTime, TimeUnit.MILLISECONDS); } private static class PriorityThreadPoolExecutor extends ThreadPoolExecutor { private static final int DEFAULT_PRIORITY = 0; private static AtomicLong instanceCounter = new AtomicLong(); public PriorityThreadPoolExecutor(int corePoolSize, int maximumPoolSize, int keepAliveTime, TimeUnit unit) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, (BlockingQueue) new PriorityBlockingQueue<ComparableTask>(10, ComparableTask.comparatorByPriorityAndSequentialOrder())); } @Override public void execute(Runnable command) { // If this is ugly then delegator pattern needed if (command instanceof ComparableTask) //Already wrapped super.execute(command); else { super.execute(newComparableRunnableFor(command)); } } private Runnable newComparableRunnableFor(Runnable runnable) { return new ComparableRunnable((CodeGearExecutor) runnable); } @Override protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { return new ComparableFutureTask<>((CodeGearExecutor)runnable, value); } } }