<?xml version="1.0"?>
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="executor.html">

  &project;

  <properties>
    <author email="fhanik@apache.org">Filip Hanik</author>
    <title>The Executor (thread pool)</title>
  </properties>

<body>


<section name="Introduction">

  <p>The <strong>Executor</strong> represents a thread pool that can be shared 
     between components in Tomcat. Historically there has been a thread pool per
     connector created but this allows you to share a thread pool, between (primarly) connector
     but also other components when those get configured to support executors</p>


  <p>The executor has to implement the <code>org.apache.catalina.Executor</code> interface.</p>
  
  <p>The executor is a nested element to the <a href="service.html">Service</a> element.
     And in order for it to be picked up by the connectors, the Executor element has to appear
     prior to the Connector element in server.xml</p>
</section>


<section name="Attributes">

  <subsection name="Common Attributes">

  <p>All implementations of <strong>Executor</strong>
  support the following attributes:</p>

  <attributes>
 
    <attribute name="className" required="false">
      <p>The class of the implementation. The implementation has to implement the 
         <code>org.apache.catalina.Executor</code> interface.
         This interface ensures that the object can be referenced through its <code>name</code> attribute
         and that implements Lifecycle, so that it can be started and stopped with the container.
         The default value for the className is <code>org.apache.catalina.core.StandardThreadExecutor</code></p>
    </attribute>

    <attribute name="name" required="true">
      <p>The name used to reference this pool in other places in server.xml.
         The name is required and must be unique.</p>
    </attribute>

  </attributes>

  </subsection>

  <subsection name="Standard Implementation">

  <p>
  The default implementation supports the following attributes:</p>

  <attributes>

    <attribute name="threadPriority" required="false">
      <p>(int) The thread priority for threads in the executor, the default is <code>Thread.NORM_PRIORITY</code></p>
    </attribute>
    <attribute name="daemon" required="false">
      <p>(boolean) Whether the threads should be daemon threads or not, the default is <code>true</code></p>
    </attribute>
    <attribute name="namePrefix" required="false">
      <p>(String) The name prefix for each thread created by the executor.
         The thread name for an individual thread will be <code>namePrefix+threadNumber</code></p>
    </attribute>
    <attribute name="maxThreads" required="false">
      <p>(int) The max number of active threads in this pool, default is <code>200</code></p>
    </attribute>
    <attribute name="minSpareThreads" required="false">
      <p>(int) The minimum number of threads always kept alive, default is <code>25</code></p>
    </attribute>
    <attribute name="maxIdleTime" required="false">
      <p>(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less
         or equal to minSpareThreads. Default value is <code>60000</code>(1 minute)</p>
    </attribute>
  </attributes>


  </subsection>
</section>


</body>

</document>
