Package ome.services.scheduler
Class ThreadPool
- java.lang.Object
-
- java.util.concurrent.AbstractExecutorService
-
- java.util.concurrent.ThreadPoolExecutor
-
- ome.services.scheduler.ThreadPool
-
- All Implemented Interfaces:
java.util.concurrent.Executor,java.util.concurrent.ExecutorService
public class ThreadPool extends java.util.concurrent.ThreadPoolExecutorAn internal implementation ofThreadPoolExecutorthat additionally handles the submission ofbackground(Callable)tasks at a lower priority and with more limited slots.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class java.util.concurrent.ThreadPoolExecutor
java.util.concurrent.ThreadPoolExecutor.AbortPolicy, java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy, java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy, java.util.concurrent.ThreadPoolExecutor.DiscardPolicy
-
-
Constructor Summary
Constructors Constructor Description ThreadPool()Default constructor.ThreadPool(int minThreads, int maxThreads, long msTimeout, int backgroundThreads, long backgroundTimeout)This constructor creates a thread pool with an unbounded queue.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected voidafterExecute(java.lang.Runnable r, java.lang.Throwable t)StandardThreadPoolExecutorextension point which checks for the BackgroundFutureTask marker and releases a slot in themaxBackgroundSemaphore.<T> java.util.concurrent.Future<T>background(java.util.concurrent.Callable<T> callable)Schedule a task in one of the limited background slots.java.util.concurrent.ExecutorServicegetExecutor()Deprecated.protected <T> java.util.concurrent.RunnableFuture<T>newTaskFor(java.util.concurrent.Callable<T> callable)OverridesThreadPoolExecutorto return our own instance ofFutureTaskso that we have a marker for when the background activity is completed inafterExecute(Runnable, Throwable).-
Methods inherited from class java.util.concurrent.ThreadPoolExecutor
allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, execute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getQueue, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, remove, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, shutdown, shutdownNow, terminated, toString
-
-
-
-
Constructor Detail
-
ThreadPool
public ThreadPool()
Default constructor. Unlike the argument constructor, it effectively has no queue for tasks and will always create a new thread to accommodate new tasks. Background tasks are limited to 10.
-
ThreadPool
public ThreadPool(int minThreads, int maxThreads, long msTimeout, int backgroundThreads, long backgroundTimeout)This constructor creates a thread pool with an unbounded queue. This means thatminThreadswill set the number of core threads, which is the maximum number of threads active at one time when an unbounded queue is used. This also means thatmaxThreadsdoes nothing, since threads are created beyond the core pool size only when the queue is full. Additionally, by default core threads never time out, somsTimeoutalso does nothing. See theThreadPoolExecutordocs for more information.- Parameters:
minThreads- Sets the core pool size which is also the MAX pool sizemaxThreads- This does NOTHINGmsTimeout- This does NOTHINGbackgroundThreads- Parameter name is a bit misleading. It is the maximum number of background tasks that can be submitted (queued or running) at once. The background threads come from the same pool, which is limited tominThreadsin size, so ifminThreadsis lower, that will control the maximum number of threads capable of running background tasks.backgroundTimeout- If more thanbackgroundThreadstasks are queued or processing, this is how long a task will wait to be submitted before being dropped
-
-
Method Detail
-
getExecutor
@Deprecated public java.util.concurrent.ExecutorService getExecutor()
Deprecated.Returns this. PreviouslyThreadPoolwas not itself anExecutorServiceand returned a delegate instead, most typically in a Spring configuration.
-
background
public <T> java.util.concurrent.Future<T> background(java.util.concurrent.Callable<T> callable)
Schedule a task in one of the limited background slots. If scheduling takes more than hour then the submission will be rejected. Otherwise, the task will run in the same thread pool as both USER and BACKGROUND tasks.- Parameters:
callable-- Returns:
- a future for this task
-
newTaskFor
protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T> callable)
OverridesThreadPoolExecutorto return our own instance ofFutureTaskso that we have a marker for when the background activity is completed inafterExecute(Runnable, Throwable). Overriding this method is somewhat non-standard.- Overrides:
newTaskForin classjava.util.concurrent.AbstractExecutorService
-
afterExecute
protected void afterExecute(java.lang.Runnable r, java.lang.Throwable t)StandardThreadPoolExecutorextension point which checks for the BackgroundFutureTask marker and releases a slot in themaxBackgroundSemaphore.- Overrides:
afterExecutein classjava.util.concurrent.ThreadPoolExecutor
-
-