# Class Daemon

java.lang.Object
org.simpleframework.util.thread.Daemon

All Implemented Interfaces:
  `Runnable`

public abstract class Daemon extends Object implements Runnable
The `Daemon` object provides a named daemon thread which will execute the `run` method when started. This offers some convenience in that it hides the normal thread methods and also allows the object extending this to provide the name of the internal thread, which is given an incrementing sequence number appended to the name provided.

Author:
  Niall Gallagher

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`Daemon()`
Constructor for the `Daemon` object.

## Method Summary

Modifier and Type
Method
Description
`String`
`getName()`
This is used to acquire the name of the thread.
`void`
`interrupt()`
This is used to interrupt the internal thread.
`boolean`
`isStarted()`
This is used to determine if the daemon has already started.
`void`
`join()`
This is used to join with the internal thread of this daemon.
`void`
`start()`
This is used to start the internal thread.

### Methods inherited from class Object

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

### Methods inherited from interface Runnable

`run`

## Constructor Details

### Daemon

protected Daemon()
Constructor for the `Daemon` object. This will create the internal thread and ensure it is a daemon. When it is started the name of the internal thread is set using the name of the instance as taken from `getName`. If the name provided is null then no name is set for the thread.

## Method Details

### start

public void start()
This is used to start the internal thread. Once started the internal thread will execute the `run` method of this instance. Aside from starting the thread this will also ensure the internal thread has a unique name.

### isStarted

public boolean isStarted()
This is used to determine if the daemon has already started. Once started it can not be started again. This ensures that when dead it remains dead. The contract of this method is that if the `start` method is invoked at any point this method will always return true.

Returns:
  true if the daemon has already been started

### interrupt

public void interrupt()
This is used to interrupt the internal thread. This is used when there is a need to wake the thread from a sleeping or waiting state so that some other operation can be performed. Typically this is required when killing the thread.

### join

public void join() throws InterruptedException
This is used to join with the internal thread of this daemon. Rather than exposing the internal thread a `join` method is provided. This allows asynchronous threads to wait for the daemon to complete simulating synchronous action.

Throws:
  `InterruptedException` - if the thread is interrupted

### getName

public String getName()
This is used to acquire the name of the thread. This will be overridden by instances that wish to provide a descriptive name for the thread. If this is not overridden then the name of the thread is the simple name of the implementation.

Returns:
  the name of the internal thread executed