com.google.appengine.api

## Class ThreadManager

- java.lang.Object
- - com.google.appengine.api.ThreadManager

-     public final class ThreadManager
      extends java.lang.Object

  `ThreadManager` exposes a `ThreadFactory` that allows App Engine applications to spawn new threads. Refer to this discussion of threads for drawbacks of thread usage and possible alternatives.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ThreadManager()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static java.util.concurrent.ThreadFactory` | `backgroundThreadFactory()` Returns a `ThreadFactory` that will create threads that are independent of the current request.
    `static java.lang.Thread` | `createBackgroundThread(java.lang.Runnable runnable)` Create a new `Thread` that executes `runnable` independent of the current request.
    `static java.lang.Thread` | `createThreadForCurrentRequest(java.lang.Runnable runnable)` Create a new `Thread` that executes `runnable` for the duration of the current request.
    `static java.util.concurrent.ThreadFactory` | `currentRequestThreadFactory()` Returns a `ThreadFactory` that will create threads scoped to the current request.

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ThreadManager

          public ThreadManager()

  - ### Method Detail

    - #### currentRequestThreadFactory

          public static java.util.concurrent.ThreadFactory currentRequestThreadFactory()

      Returns a `ThreadFactory` that will create threads scoped to the current request. These threads will be interrupted at the end of the current request and must complete within the request deadline. If they fail to, the instance containing them may be terminated.

      The principal reason to use this method is so that the created threads can make App Engine API calls (`com.google.appengine.api.*`). In general, threads not associated with a request cannot make these API calls.

      The returned factory is typically used with a call like `Executors.newCachedThreadPool(ThreadFactory)`. Do not use the `ExecutorService` returned by this call after the request that created it has completed.

      Note that calling `ThreadFactory.newThread(java.lang.Runnable)` on the returned instance may throw any of the unchecked exceptions mentioned by `createBackgroundThread(java.lang.Runnable)`.

      Throws:
        `java.lang.NullPointerException` - if the calling thread is not associated with a request.

    - #### createThreadForCurrentRequest

          public static java.lang.Thread createThreadForCurrentRequest(java.lang.Runnable runnable)

      Create a new `Thread` that executes `runnable` for the duration of the current request. Calling this method is equivalent to invoking `ThreadFactory.newThread(java.lang.Runnable)` on the ThreadFactory returned from `currentRequestThreadFactory()`. This thread will be interrupted at the end of the current request and must complete within the request deadline. If it fails to, the instance containing it may be terminated.
      Throws:
        `java.lang.IllegalStateException` - if you try to create more than 50 threads in a single request.
        `java.lang.NullPointerException` - if the calling thread is not associated with a request.
        `ApiProxy.FeatureNotEnabledException` - If this application cannot use this feature.

    - #### backgroundThreadFactory

          public static java.util.concurrent.ThreadFactory backgroundThreadFactory()

      Returns a `ThreadFactory` that will create threads that are independent of the current request.

      This ThreadFactory can currently only be used by backends.

      Note that calling `ThreadFactory.newThread(java.lang.Runnable)` on the returned instance may throw any of the unchecked exceptions mentioned by `createBackgroundThread(java.lang.Runnable)`.

    - #### createBackgroundThread

          public static java.lang.Thread createBackgroundThread(java.lang.Runnable runnable)

      Create a new `Thread` that executes `runnable` independent of the current request. Calling this method is equivalent to invoking `ThreadFactory.newThread(java.lang.Runnable)` on the ThreadFactory returned from `backgroundThreadFactory()`.

      This method can currently only be used by backends.

      Throws:
        `ApiProxy.FeatureNotEnabledException` - If this application cannot use this feature.
        `ApiProxy.CancelledException` - If the request was interrupted while creating the new thread.
        `ApiProxy.ApiDeadlineExceededException` - If creation of the new thread took too long.