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

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

All Implemented Interfaces:
  Service

    @Beta
    public abstract class AbstractService

extends Object
implements Service

Base class for implementing services that can handle `doStart()` and `doStop()` requests, responding to them with `notifyStarted()` and `notifyStopped()` callbacks. Its subclasses must manage threads manually; consider `AbstractExecutionThreadService` if you need only a single execution thread.

Since:
  1.0
Author:
  Jesse Wilson, Luke Sandberg

Nested Class Summary

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

Constructor Summary
`protected` `AbstractService()`

Method Summary
`void` `addListener(Service.Listener listener, Executor executor)` Registers a `Service.Listener` to be executed on the given executor.
`protected abstract void` `doStart()` This method is called by `start()` to initiate service startup.
`protected abstract void` `doStop()` This method should be used to initiate service shutdown.
`boolean` `isRunning()` Returns `true` if this service is running.
`protected void` `notifyFailed(Throwable cause)` Invoke this method to transition the service to the `Service.State.FAILED`.
`protected void` `notifyStarted()` Implementing classes should invoke this method once their service has started.
`protected void` `notifyStopped()` Implementing classes should invoke this method once their service has stopped.
`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.
`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

### AbstractService

    protected AbstractService()

Method Detail

### doStart

    protected abstract void doStart()

  This method is called by `start()` to initiate service startup. The invocation of this method should cause a call to `notifyStarted()`, either during this method's run, or after it has returned. If startup fails, the invocation should cause a call to `notifyFailed(Throwable)` instead.

  This method should return promptly; prefer to do work on a different thread where it is convenient. It is invoked exactly once on service startup, even when `start()` is called multiple times.

### doStop

    protected abstract void doStop()

  This method should be used to initiate service shutdown. The invocation of this method should cause a call to `notifyStopped()`, either during this method's run, or after it has returned. If shutdown fails, the invocation should cause a call to `notifyFailed(Throwable)` instead.

  This method should return promptly; prefer to do work on a different thread where it is convenient. It is invoked exactly once on service shutdown, even when `stop()` is called multiple times.

### 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.

### 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.

### startAndWait

    public 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.

### stopAndWait

    public 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.

### notifyStarted

    protected final void notifyStarted()

  Implementing classes should invoke this method once their service has started. It will cause the service to transition from `Service.State.STARTING` to `Service.State.RUNNING`.

  Throws:
    `IllegalStateException` - if the service is not `Service.State.STARTING`.

### notifyStopped

    protected final void notifyStopped()

  Implementing classes should invoke this method once their service has stopped. It will cause the service to transition from `Service.State.STOPPING` to `Service.State.TERMINATED`.

  Throws:
    `IllegalStateException` - if the service is neither `Service.State.STOPPING` nor `Service.State.RUNNING`.

### notifyFailed

    protected final void notifyFailed(Throwable cause)

  Invoke this method to transition the service to the `Service.State.FAILED`. The service will not be stopped if it is running. Invoke this method when a service has failed critically or otherwise cannot be started nor stopped.

### 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`

### 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()`.

### toString

    public String toString()

  Overrides:
    `toString` in class `Object`

Copyright © 2010-2012. All Rights Reserved.