Class PriorityThreadPoolExecutor
java.lang.Object
java.util.concurrent.AbstractExecutorService
java.util.concurrent.ThreadPoolExecutor
org.apache.mina.filter.executor.PriorityThreadPoolExecutor
- All Implemented Interfaces:
Executor, ExecutorService
A
ThreadPoolExecutor that maintains the order of IoEvents
within a session (similar to OrderedThreadPoolExecutor) and allows
some sessions to be prioritized over other sessions.
If you don't need to maintain the order of events per session, please use
UnorderedThreadPoolExecutor.
If you don't need to prioritize sessions, please use
OrderedThreadPoolExecutor.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static classA class used to preserve first-in-first-out order of sessions that have equal priority.private classA class used to store the ordered list of events to be processed by the session, and the current task state.private classNested classes/interfaces inherited from class ThreadPoolExecutor
ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.DiscardPolicy -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Comparator<IoSession> The session comparatorprivate longprivate static final intA default value for the initial pool sizeprivate static final intA default value for the KeepAlive delayprivate static final intA default value for the maximum pool sizeprivate final IoEventQueueHandlerprivate static final PriorityThreadPoolExecutor.SessionEntryprivate final AtomicIntegerprivate intprivate static final org.slf4j.LoggerA logger for this class (commented as it breaks MDCFlter tests)private static final AtomicLongGenerates sequential identifiers that ensure FIFO behavior.private booleanprivate static final AttributeKeyA key stored into the session's attribute for the event tasks being queuedprivate final BlockingQueue<PriorityThreadPoolExecutor.SessionEntry> A queue used to store the available sessionsprivate final Set<PriorityThreadPoolExecutor.Worker> -
Constructor Summary
ConstructorsConstructorDescriptionCreates a default ThreadPool, with default values : minimum pool size is 0 maximum pool size is 16 keepAlive set to 30 seconds A default ThreadFactory All events are acceptedPriorityThreadPoolExecutor(int maximumPoolSize) Creates a default ThreadPool, with default values : minimum pool size is 0 keepAlive set to 30 seconds A default ThreadFactory All events are acceptedPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize) Creates a default ThreadPool, with default values : keepAlive set to 30 seconds A default ThreadFactory All events are acceptedPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit) Creates a default ThreadPool, with default values : minimum pool size is 0 A default ThreadFactoryPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory) Creates a default ThreadPoolPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory, IoEventQueueHandler eventQueueHandler, Comparator<IoSession> comparator) Creates a new instance of a PrioritisedOrderedThreadPoolExecutor.PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, IoEventQueueHandler eventQueueHandler) Creates a default ThreadPool, with default values : A default ThreadFactoryPriorityThreadPoolExecutor(int maximumPoolSize, Comparator<IoSession> comparator) Creates a default ThreadPool, with default values : maximum pool size is 16 keepAlive set to 30 seconds A default ThreadFactory All events are acceptedPriorityThreadPoolExecutor(Comparator<IoSession> comparator) Creates a default ThreadPool, with default values : minimum pool size is 0 maximum pool size is 16 keepAlive set to 30 seconds A default ThreadFactory All events are accepted -
Method Summary
Modifier and TypeMethodDescriptionprivate voidAdd a new thread to execute a task, if needed and possible.private voidAdd a new Worker only if there are no idle worker.booleanawaitTermination(long timeout, TimeUnit unit) private voidcheckTaskType(Runnable task) voidintlongintintgetQueue()getSessionTasksQueue(IoSession session) Get the session's tasks queue.longbooleanbooleanbooleanintbooleanprivate voidA Helper class used to print the list of events being queued.voidpurge()private voidrejectTask(Runnable task) booleanprivate voidvoidsetCorePoolSize(int minimumPoolSize) voidsetMaximumPoolSize(int maximumPoolSize) voidvoidshutdown()Methods inherited from class ThreadPoolExecutor
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, beforeExecute, finalize, getCorePoolSize, getKeepAliveTime, getMaximumPoolSize, getRejectedExecutionHandler, getThreadFactory, setKeepAliveTime, setThreadFactory, terminated, toStringMethods inherited from class AbstractExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor, submit, submit, submit
-
Field Details
-
LOGGER
private static final org.slf4j.Logger LOGGERA logger for this class (commented as it breaks MDCFlter tests) -
seq
Generates sequential identifiers that ensure FIFO behavior. -
DEFAULT_INITIAL_THREAD_POOL_SIZE
private static final int DEFAULT_INITIAL_THREAD_POOL_SIZEA default value for the initial pool size- See Also:
-
DEFAULT_MAX_THREAD_POOL
private static final int DEFAULT_MAX_THREAD_POOLA default value for the maximum pool size- See Also:
-
DEFAULT_KEEP_ALIVE
private static final int DEFAULT_KEEP_ALIVEA default value for the KeepAlive delay- See Also:
-
EXIT_SIGNAL
-
TASKS_QUEUE
A key stored into the session's attribute for the event tasks being queued -
waitingSessions
A queue used to store the available sessions -
workers
-
largestPoolSize
private volatile int largestPoolSize -
idleWorkers
-
completedTaskCount
private long completedTaskCount -
shutdown
private volatile boolean shutdown -
eventQueueHandler
-
comparator
The session comparator
-
-
Constructor Details
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor()Creates a default ThreadPool, with default values :- minimum pool size is 0
- maximum pool size is 16
- keepAlive set to 30 seconds
- A default ThreadFactory
- All events are accepted
-
PriorityThreadPoolExecutor
Creates a default ThreadPool, with default values :- minimum pool size is 0
- maximum pool size is 16
- keepAlive set to 30 seconds
- A default ThreadFactory
- All events are accepted
- Parameters:
comparator- A session comparator
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int maximumPoolSize) Creates a default ThreadPool, with default values :- minimum pool size is 0
- keepAlive set to 30 seconds
- A default ThreadFactory
- All events are accepted
- Parameters:
maximumPoolSize- The maximum pool size
-
PriorityThreadPoolExecutor
Creates a default ThreadPool, with default values :- maximum pool size is 16
- keepAlive set to 30 seconds
- A default ThreadFactory
- All events are accepted
- Parameters:
maximumPoolSize- The maximum pool sizecomparator- A session comparator
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize) Creates a default ThreadPool, with default values :- keepAlive set to 30 seconds
- A default ThreadFactory
- All events are accepted
- Parameters:
minimumPoolSize- The initial pool sizemaximumPoolSize- The maximum pool size
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit) Creates a default ThreadPool, with default values :- minimum pool size is 0
- A default ThreadFactory
- Parameters:
minimumPoolSize- The initial pool sizemaximumPoolSize- The maximum pool sizekeepAliveTime- Default duration for a threadunit- Time unit used for the keepAlive value
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, IoEventQueueHandler eventQueueHandler) Creates a default ThreadPool, with default values :- A default ThreadFactory
- Parameters:
minimumPoolSize- The initial pool sizemaximumPoolSize- The maximum pool sizekeepAliveTime- Default duration for a threadunit- Time unit used for the keepAlive valueeventQueueHandler- The queue used to store events
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory) Creates a default ThreadPool- Parameters:
minimumPoolSize- The initial pool sizemaximumPoolSize- The maximum pool sizekeepAliveTime- Default duration for a threadunit- Time unit used for the keepAlive valuethreadFactory- The factory used to create threads
-
PriorityThreadPoolExecutor
public PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory, IoEventQueueHandler eventQueueHandler, Comparator<IoSession> comparator) Creates a new instance of a PrioritisedOrderedThreadPoolExecutor.- Parameters:
minimumPoolSize- The initial pool sizePoolSizemaximumPoolSize- The maximum pool sizekeepAliveTime- Default duration for a threadunit- Time unit used for the keepAlive valuethreadFactory- The factory used to create threadseventQueueHandler- The queue used to store eventscomparator- A session comparator
-
-
Method Details
-
getSessionTasksQueue
Get the session's tasks queue. -
getQueueHandler
- Returns:
- The associated queue handler.
-
setRejectedExecutionHandler
- Overrides:
setRejectedExecutionHandlerin classThreadPoolExecutor
-
addWorker
private void addWorker()Add a new thread to execute a task, if needed and possible. It depends on the current pool size. If it's full, we do nothing. -
addWorkerIfNecessary
private void addWorkerIfNecessary()Add a new Worker only if there are no idle worker. -
removeWorker
private void removeWorker() -
setMaximumPoolSize
public void setMaximumPoolSize(int maximumPoolSize) - Overrides:
setMaximumPoolSizein classThreadPoolExecutor
-
awaitTermination
- Specified by:
awaitTerminationin interfaceExecutorService- Overrides:
awaitTerminationin classThreadPoolExecutor- Throws:
InterruptedException
-
isShutdown
public boolean isShutdown()- Specified by:
isShutdownin interfaceExecutorService- Overrides:
isShutdownin classThreadPoolExecutor
-
isTerminated
public boolean isTerminated()- Specified by:
isTerminatedin interfaceExecutorService- Overrides:
isTerminatedin classThreadPoolExecutor
-
shutdown
public void shutdown()- Specified by:
shutdownin interfaceExecutorService- Overrides:
shutdownin classThreadPoolExecutor
-
shutdownNow
- Specified by:
shutdownNowin interfaceExecutorService- Overrides:
shutdownNowin classThreadPoolExecutor
-
print
-
execute
- Specified by:
executein interfaceExecutor- Overrides:
executein classThreadPoolExecutor
-
rejectTask
-
checkTaskType
-
getActiveCount
public int getActiveCount()- Overrides:
getActiveCountin classThreadPoolExecutor
-
getCompletedTaskCount
public long getCompletedTaskCount()- Overrides:
getCompletedTaskCountin classThreadPoolExecutor
-
getLargestPoolSize
public int getLargestPoolSize()- Overrides:
getLargestPoolSizein classThreadPoolExecutor
-
getPoolSize
public int getPoolSize()- Overrides:
getPoolSizein classThreadPoolExecutor
-
getTaskCount
public long getTaskCount()- Overrides:
getTaskCountin classThreadPoolExecutor
-
isTerminating
public boolean isTerminating()- Overrides:
isTerminatingin classThreadPoolExecutor
-
prestartAllCoreThreads
public int prestartAllCoreThreads()- Overrides:
prestartAllCoreThreadsin classThreadPoolExecutor
-
prestartCoreThread
public boolean prestartCoreThread()- Overrides:
prestartCoreThreadin classThreadPoolExecutor
-
getQueue
- Overrides:
getQueuein classThreadPoolExecutor
-
purge
public void purge()- Overrides:
purgein classThreadPoolExecutor
-
remove
- Overrides:
removein classThreadPoolExecutor
-
setCorePoolSize
public void setCorePoolSize(int minimumPoolSize) - Overrides:
setCorePoolSizein classThreadPoolExecutor
-