Class EatWhatYouKill
- All Implemented Interfaces:
Runnable
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
,ExecutionStrategy
A strategy where the thread that produces will run the resulting task if it is possible to do so without thread starvation.
This strategy preemptively dispatches a thread as a pending producer, so that when a thread produces a task it can immediately run the task and let the pending producer thread take over production. When operating in this way, the sub-strategy is called Execute Produce Consume (EPC).
However, if the task produced uses the Invocable
API to indicate that
it will not block, then the strategy will run it directly, regardless of the
presence of a pending producer thread and then resume production after the
task has completed. When operating in this pattern, the sub-strategy is called
ProduceConsume (PC).
If there is no pending producer thread available and if the task has not indicated it is non-blocking, then this strategy will dispatch the execution of the task and immediately continue production. When operating in this pattern, the sub-strategy is called ProduceExecuteConsume (PEC).
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static enum
private static enum
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.ExecutionStrategy
ExecutionStrategy.Producer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final LongAdder
private final Executor
private final LongAdder
private final LongAdder
private boolean
private final LongAdder
private final ExecutionStrategy.Producer
private EatWhatYouKill.State
private final TryExecutor
private static final Logger
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
dispatch()
Initiates (or resumes) the task production and consumption.private boolean
doProduce
(boolean nonBlocking) private void
long
long
long
long
private void
getState
(StringBuilder builder) private void
getString
(StringBuilder builder) private void
invokeTask
(Runnable task) boolean
isIdle()
void
produce()
Initiates (or resumes) the task production and consumption.private Runnable
void
reset()
void
run()
private void
toString()
private void
tryProduce
(boolean wasPending) Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, doStart, doStop, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
-
Field Details
-
LOG
-
_pcMode
-
_picMode
-
_pecMode
-
_epcMode
-
_producer
-
_executor
-
_tryExecutor
-
_state
-
_pending
private boolean _pending
-
-
Constructor Details
-
EatWhatYouKill
-
-
Method Details
-
dispatch
public void dispatch()Description copied from interface:ExecutionStrategy
Initiates (or resumes) the task production and consumption.
This method guarantees that the task is never run by the thread that called this method.
TODO review the need for this (only used by HTTP2 push)- Specified by:
dispatch
in interfaceExecutionStrategy
- See Also:
-
run
public void run() -
produce
public void produce()Description copied from interface:ExecutionStrategy
Initiates (or resumes) the task production and consumption.
The produced task may be run by the same thread that called this method.
- Specified by:
produce
in interfaceExecutionStrategy
- See Also:
-
tryProduce
private void tryProduce(boolean wasPending) -
doProduce
private boolean doProduce(boolean nonBlocking) -
runTask
-
invokeTask
-
produceTask
-
execute
-
getPCTasksConsumed
@ManagedAttribute(value="number of tasks consumed with PC mode", readonly=true) public long getPCTasksConsumed() -
getPICTasksExecuted
@ManagedAttribute(value="number of tasks executed with PIC mode", readonly=true) public long getPICTasksExecuted() -
getPECTasksExecuted
@ManagedAttribute(value="number of tasks executed with PEC mode", readonly=true) public long getPECTasksExecuted() -
getEPCTasksConsumed
@ManagedAttribute(value="number of tasks consumed with EPC mode", readonly=true) public long getEPCTasksConsumed() -
isIdle
@ManagedAttribute(value="whether this execution strategy is idle", readonly=true) public boolean isIdle() -
reset
-
toString
- Overrides:
toString
in classAbstractLifeCycle
-
toStringLocked
-
getString
-
getState
-