## com.google.common.util.concurrent
Class AbstractIdleService

    java.lang.Object
      com.google.common.util.concurrent.AbstractIdleService

All Implemented Interfaces:
  Service

    @Beta
    public abstract class AbstractIdleService

extends Object
implements Service

Base class for services that do not need a thread while "running" but may need one during startup and shutdown. Subclasses can implement `startUp()` and `shutDown()` methods, each which run in a executor which by default uses a separate thread for each method.

Since:
  1.0
Author:
  Chris Nokleberg

Nested Class Summary

Nested classes/interfaces inherited from interface com.google.common.util.concurrent.Service
`Service.Listener, Service.State`

Constructor Summary
`AbstractIdleService()`

Method Summary
`void` `addListener(Service.Listener listener, Executor executor)` Registers a `Service.Listener` to be executed on the given executor.
`protected Executor` `executor(Service.State state)` Returns the `Executor` that will be used to run this service.
`boolean` `isRunning()` Returns `true` if this service is running.
`protected abstract void` `shutDown()` Stop the service.
`ListenableFuture<Service.State>` `start()` If the service state is `Service.State.NEW`, this initiates service startup and returns immediately.
`Service.State` `startAndWait()` Initiates service startup (if necessary), returning once the service has finished starting.
`protected abstract void` `startUp()` Start the service.
`Service.State` `state()` Returns the lifecycle state of the service.
`ListenableFuture<Service.State>` `stop()` If the service is starting or running, this initiates service shutdown and returns immediately.
`Service.State` `stopAndWait()` Initiates service shutdown (if necessary), returning once the service has finished stopping.
`String` `toString()`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### AbstractIdleService

    public AbstractIdleService()

Method Detail

### startUp

    protected abstract void startUp()
                             throws Exception

  Start the service.

  Throws:
    `Exception`

### shutDown

    protected abstract void shutDown()
                              throws Exception

  Stop the service.

  Throws:
    `Exception`

### executor

    protected Executor executor(Service.State state)

  Returns the `Executor` that will be used to run this service. Subclasses may override this method to use a custom `Executor`, which may configure its worker thread with a specific name, thread group or priority. The returned executor's `execute()` method is called when this service is started and stopped, and should return promptly.

  Parameters:
    `state` - `Service.State.STARTING` or `Service.State.STOPPING`, used by the default implementation for naming the thread

### toString

    public String toString()

  Overrides:
    `toString` in class `Object`

### start

    public final ListenableFuture<Service.State> start()

  Description copied from interface: `Service`
  If the service state is `Service.State.NEW`, this initiates service startup and returns immediately. If the service has already been started, this method returns immediately without taking action. A stopped service may not be restarted.

  Specified by:
    `start` in interface `Service`
  Returns:
    a future for the startup result, regardless of whether this call initiated startup. Calling `Future.get()` will block until the service has finished starting, and returns one of `Service.State.RUNNING`, `Service.State.STOPPING` or `Service.State.TERMINATED`. If the service fails to start, `Future.get()` will throw an `ExecutionException`, and the service's state will be `Service.State.FAILED`. If it has already finished starting, `Future.get()` returns immediately. Cancelling this future has no effect on the service.

### startAndWait

    public final Service.State startAndWait()

  Description copied from interface: `Service`
  Initiates service startup (if necessary), returning once the service has finished starting. Unlike calling `start().get()`, this method throws no checked exceptions, and it cannot be interrupted.

  Specified by:
    `startAndWait` in interface `Service`
  Returns:
    the state of the service when startup finished.

### isRunning

    public final boolean isRunning()

  Description copied from interface: `Service`
  Returns `true` if this service is running.

  Specified by:
    `isRunning` in interface `Service`

### state

    public final Service.State state()

  Description copied from interface: `Service`
  Returns the lifecycle state of the service.

  Specified by:
    `state` in interface `Service`

### stop

    public final ListenableFuture<Service.State> stop()

  Description copied from interface: `Service`
  If the service is starting or running, this initiates service shutdown and returns immediately. If the service is new, it is terminated without having been started nor stopped. If the service has already been stopped, this method returns immediately without taking action.

  Specified by:
    `stop` in interface `Service`
  Returns:
    a future for the shutdown result, regardless of whether this call initiated shutdown. Calling `Future.get()` will block until the service has finished shutting down, and either returns `Service.State.TERMINATED` or throws an `ExecutionException`. If it has already finished stopping, `Future.get()` returns immediately. Cancelling this future has no effect on the service.

### stopAndWait

    public final Service.State stopAndWait()

  Description copied from interface: `Service`
  Initiates service shutdown (if necessary), returning once the service has finished stopping. If this is `Service.State.STARTING`, startup will be cancelled. If this is `Service.State.NEW`, it is `terminated` without having been started nor stopped. Unlike calling `stop().get()`, this method throws no checked exceptions.

  Specified by:
    `stopAndWait` in interface `Service`
  Returns:
    the state of the service when shutdown finished.

### addListener

    public final void addListener(Service.Listener listener,
                                  Executor executor)

  Description copied from interface: `Service`
  Registers a `Service.Listener` to be executed on the given executor. The listener will have the corresponding transition method called whenever the service changes state. The listener will not have previous state changes replayed, so it is suggested that listeners are added before the service starts.

  There is no guaranteed ordering of execution of listeners, but any listener added through this method is guaranteed to be called whenever there is a state change.

  Exceptions thrown by a listener will be propagated up to the executor. Any exception thrown during `Executor.execute` (e.g., a `RejectedExecutionException` or an exception thrown by inline execution) will be caught and logged.

  Specified by:
    `addListener` in interface `Service`
  Parameters:
    `listener` - the listener to run when the service changes state is complete
    `executor` - the executor in which the the listeners callback methods will be run. For fast, lightweight listeners that would be safe to execute in any thread, consider `MoreExecutors.sameThreadExecutor()`.

Copyright © 2010-2012. All Rights Reserved.