Package org.apache.mina.filter.executor
Class PriorityThreadPoolExecutor
- java.lang.Object
-
- java.util.concurrent.AbstractExecutorService
-
- java.util.concurrent.ThreadPoolExecutor
-
- org.apache.mina.filter.executor.PriorityThreadPoolExecutor
-
- All Implemented Interfaces:
java.util.concurrent.Executor,java.util.concurrent.ExecutorService
public class PriorityThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutorAThreadPoolExecutorthat maintains the order ofIoEvents within a session (similar toOrderedThreadPoolExecutor) 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 Classes Modifier and Type Class Description (package private) static classPriorityThreadPoolExecutor.SessionEntryA class used to preserve first-in-first-out order of sessions that have equal priority.private classPriorityThreadPoolExecutor.SessionQueueA class used to store the ordered list of events to be processed by the session, and the current task state.private classPriorityThreadPoolExecutor.Worker-
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
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Comparator<IoSession>comparatorThe session comparatorprivate longcompletedTaskCountprivate static intDEFAULT_INITIAL_THREAD_POOL_SIZEA default value for the initial pool sizeprivate static intDEFAULT_KEEP_ALIVEA default value for the KeepAlive delayprivate static intDEFAULT_MAX_THREAD_POOLA default value for the maximum pool sizeprivate IoEventQueueHandlereventQueueHandlerprivate static PriorityThreadPoolExecutor.SessionEntryEXIT_SIGNALprivate java.util.concurrent.atomic.AtomicIntegeridleWorkersprivate intlargestPoolSizeprivate static org.slf4j.LoggerLOGGERA logger for this class (commented as it breaks MDCFlter tests)private static java.util.concurrent.atomic.AtomicLongseqGenerates sequential identifiers that ensure FIFO behavior.private booleanshutdownprivate static AttributeKeyTASKS_QUEUEA key stored into the session's attribute for the event tasks being queuedprivate java.util.concurrent.BlockingQueue<PriorityThreadPoolExecutor.SessionEntry>waitingSessionsA queue used to store the available sessionsprivate java.util.Set<PriorityThreadPoolExecutor.Worker>workers
-
Constructor Summary
Constructors Constructor Description 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 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, java.util.concurrent.TimeUnit unit)Creates a default ThreadPool, with default values : minimum pool size is 0 A default ThreadFactoryPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, java.util.concurrent.TimeUnit unit, java.util.concurrent.ThreadFactory threadFactory)Creates a default ThreadPoolPriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, java.util.concurrent.TimeUnit unit, java.util.concurrent.ThreadFactory threadFactory, IoEventQueueHandler eventQueueHandler, java.util.Comparator<IoSession> comparator)Creates a new instance of a PrioritisedOrderedThreadPoolExecutor.PriorityThreadPoolExecutor(int minimumPoolSize, int maximumPoolSize, long keepAliveTime, java.util.concurrent.TimeUnit unit, IoEventQueueHandler eventQueueHandler)Creates a default ThreadPool, with default values : A default ThreadFactoryPriorityThreadPoolExecutor(int maximumPoolSize, java.util.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(java.util.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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddWorker()Add a new thread to execute a task, if needed and possible.private voidaddWorkerIfNecessary()Add a new Worker only if there are no idle worker.booleanawaitTermination(long timeout, java.util.concurrent.TimeUnit unit)private voidcheckTaskType(java.lang.Runnable task)voidexecute(java.lang.Runnable task)intgetActiveCount()longgetCompletedTaskCount()intgetLargestPoolSize()intgetPoolSize()java.util.concurrent.BlockingQueue<java.lang.Runnable>getQueue()IoEventQueueHandlergetQueueHandler()private PriorityThreadPoolExecutor.SessionQueuegetSessionTasksQueue(IoSession session)Get the session's tasks queue.longgetTaskCount()booleanisShutdown()booleanisTerminated()booleanisTerminating()intprestartAllCoreThreads()booleanprestartCoreThread()private voidprint(java.util.Queue<java.lang.Runnable> queue, IoEvent event)A Helper class used to print the list of events being queued.voidpurge()private voidrejectTask(java.lang.Runnable task)booleanremove(java.lang.Runnable task)private voidremoveWorker()voidsetCorePoolSize(int minimumPoolSize)voidsetMaximumPoolSize(int maximumPoolSize)voidsetRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler handler)voidshutdown()java.util.List<java.lang.Runnable>shutdownNow()-
Methods inherited from class java.util.concurrent.ThreadPoolExecutor
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, beforeExecute, finalize, getCorePoolSize, getKeepAliveTime, getMaximumPoolSize, getRejectedExecutionHandler, getThreadFactory, setKeepAliveTime, setThreadFactory, terminated, toString
-
-
-
-
Field Detail
-
LOGGER
private static final org.slf4j.Logger LOGGER
A logger for this class (commented as it breaks MDCFlter tests)
-
seq
private static final java.util.concurrent.atomic.AtomicLong seq
Generates sequential identifiers that ensure FIFO behavior.
-
DEFAULT_INITIAL_THREAD_POOL_SIZE
private static final int DEFAULT_INITIAL_THREAD_POOL_SIZE
A default value for the initial pool size- See Also:
- Constant Field Values
-
DEFAULT_MAX_THREAD_POOL
private static final int DEFAULT_MAX_THREAD_POOL
A default value for the maximum pool size- See Also:
- Constant Field Values
-
DEFAULT_KEEP_ALIVE
private static final int DEFAULT_KEEP_ALIVE
A default value for the KeepAlive delay- See Also:
- Constant Field Values
-
EXIT_SIGNAL
private static final PriorityThreadPoolExecutor.SessionEntry EXIT_SIGNAL
-
TASKS_QUEUE
private static final AttributeKey TASKS_QUEUE
A key stored into the session's attribute for the event tasks being queued
-
waitingSessions
private final java.util.concurrent.BlockingQueue<PriorityThreadPoolExecutor.SessionEntry> waitingSessions
A queue used to store the available sessions
-
workers
private final java.util.Set<PriorityThreadPoolExecutor.Worker> workers
-
largestPoolSize
private volatile int largestPoolSize
-
idleWorkers
private final java.util.concurrent.atomic.AtomicInteger idleWorkers
-
completedTaskCount
private long completedTaskCount
-
shutdown
private volatile boolean shutdown
-
eventQueueHandler
private final IoEventQueueHandler eventQueueHandler
-
comparator
private final java.util.Comparator<IoSession> comparator
The session comparator
-
-
Constructor Detail
-
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
public PriorityThreadPoolExecutor(java.util.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
- 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
public PriorityThreadPoolExecutor(int maximumPoolSize, java.util.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 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, java.util.concurrent.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, java.util.concurrent.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, java.util.concurrent.TimeUnit unit, java.util.concurrent.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, java.util.concurrent.TimeUnit unit, java.util.concurrent.ThreadFactory threadFactory, IoEventQueueHandler eventQueueHandler, java.util.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 Detail
-
getSessionTasksQueue
private PriorityThreadPoolExecutor.SessionQueue getSessionTasksQueue(IoSession session)
Get the session's tasks queue.
-
getQueueHandler
public IoEventQueueHandler getQueueHandler()
- Returns:
- The associated queue handler.
-
setRejectedExecutionHandler
public void setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler handler)
- Overrides:
setRejectedExecutionHandlerin classjava.util.concurrent.ThreadPoolExecutor
-
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 classjava.util.concurrent.ThreadPoolExecutor
-
awaitTermination
public boolean awaitTermination(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException- Specified by:
awaitTerminationin interfacejava.util.concurrent.ExecutorService- Overrides:
awaitTerminationin classjava.util.concurrent.ThreadPoolExecutor- Throws:
java.lang.InterruptedException
-
isShutdown
public boolean isShutdown()
- Specified by:
isShutdownin interfacejava.util.concurrent.ExecutorService- Overrides:
isShutdownin classjava.util.concurrent.ThreadPoolExecutor
-
isTerminated
public boolean isTerminated()
- Specified by:
isTerminatedin interfacejava.util.concurrent.ExecutorService- Overrides:
isTerminatedin classjava.util.concurrent.ThreadPoolExecutor
-
shutdown
public void shutdown()
- Specified by:
shutdownin interfacejava.util.concurrent.ExecutorService- Overrides:
shutdownin classjava.util.concurrent.ThreadPoolExecutor
-
shutdownNow
public java.util.List<java.lang.Runnable> shutdownNow()
- Specified by:
shutdownNowin interfacejava.util.concurrent.ExecutorService- Overrides:
shutdownNowin classjava.util.concurrent.ThreadPoolExecutor
-
print
private void print(java.util.Queue<java.lang.Runnable> queue, IoEvent event)A Helper class used to print the list of events being queued.
-
execute
public void execute(java.lang.Runnable task)
- Specified by:
executein interfacejava.util.concurrent.Executor- Overrides:
executein classjava.util.concurrent.ThreadPoolExecutor
-
rejectTask
private void rejectTask(java.lang.Runnable task)
-
checkTaskType
private void checkTaskType(java.lang.Runnable task)
-
getActiveCount
public int getActiveCount()
- Overrides:
getActiveCountin classjava.util.concurrent.ThreadPoolExecutor
-
getCompletedTaskCount
public long getCompletedTaskCount()
- Overrides:
getCompletedTaskCountin classjava.util.concurrent.ThreadPoolExecutor
-
getLargestPoolSize
public int getLargestPoolSize()
- Overrides:
getLargestPoolSizein classjava.util.concurrent.ThreadPoolExecutor
-
getPoolSize
public int getPoolSize()
- Overrides:
getPoolSizein classjava.util.concurrent.ThreadPoolExecutor
-
getTaskCount
public long getTaskCount()
- Overrides:
getTaskCountin classjava.util.concurrent.ThreadPoolExecutor
-
isTerminating
public boolean isTerminating()
- Overrides:
isTerminatingin classjava.util.concurrent.ThreadPoolExecutor
-
prestartAllCoreThreads
public int prestartAllCoreThreads()
- Overrides:
prestartAllCoreThreadsin classjava.util.concurrent.ThreadPoolExecutor
-
prestartCoreThread
public boolean prestartCoreThread()
- Overrides:
prestartCoreThreadin classjava.util.concurrent.ThreadPoolExecutor
-
getQueue
public java.util.concurrent.BlockingQueue<java.lang.Runnable> getQueue()
- Overrides:
getQueuein classjava.util.concurrent.ThreadPoolExecutor
-
purge
public void purge()
- Overrides:
purgein classjava.util.concurrent.ThreadPoolExecutor
-
remove
public boolean remove(java.lang.Runnable task)
- Overrides:
removein classjava.util.concurrent.ThreadPoolExecutor
-
setCorePoolSize
public void setCorePoolSize(int minimumPoolSize)
- Overrides:
setCorePoolSizein classjava.util.concurrent.ThreadPoolExecutor
-
-