Class ExecuteProduceConsume

java.lang.Object
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume
All Implemented Interfaces:
Runnable, ExecutionStrategy

public class ExecuteProduceConsume extends Object implements ExecutionStrategy, Runnable

A strategy where the thread that produces will always run the resulting task.

The strategy may then dispatch another thread to continue production.

The strategy is also known by the nickname 'eat what you kill', which comes from the hunting ethic that says a person should not kill anything he or she does not plan on eating. In this case, the phrase is used to mean that a thread should not produce a task that it does not intend to run. By making producers run the task that they have just produced avoids execution delays and avoids parallel slow down by running the task in the same core, with good chances of having a hot CPU cache. It also avoids the creation of a queue of produced tasks that the system does not yet have capacity to consume, which can save memory and exert back pressure on producers.

  • Field Details

    • LOG

      private static final Logger LOG
    • _locker

      private final Locker _locker
    • _runProduce

      private final Runnable _runProduce
    • _producer

      private final ExecutionStrategy.Producer _producer
    • _executor

      private final Executor _executor
    • _idle

      private boolean _idle
    • _execute

      private boolean _execute
    • _producing

      private boolean _producing
    • _pending

      private boolean _pending
  • Constructor Details

  • Method Details

    • 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 interface ExecutionStrategy
      See Also:
    • 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 interface ExecutionStrategy
      See Also:
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • produceConsume

      private void produceConsume()
    • isIdle

      public Boolean isIdle()
    • toString

      public String toString()
      Overrides:
      toString in class Object