Package org.apache.wiki

# Class WikiBackgroundThread

java.lang.Object
java.lang.Thread
org.apache.wiki.WikiBackgroundThread

All Implemented Interfaces:
  `Runnable`, `EventListener`, `org.apache.wiki.event.WikiEventListener`

Direct Known Subclasses:
  `RSSThread`

public abstract class WikiBackgroundThread extends Thread implements org.apache.wiki.event.WikiEventListener
Abstract Thread subclass that operates in the background; when it detects the `WikiEngineEvent.SHUTDOWN` event, it terminates itself. Subclasses of this method need only implement the method `backgroundTask()`, instead of the normal `Thread.run()`, and provide a constructor that passes the Engine and sleep interval. This class is thread-safe.

## Nested Class Summary

## Nested classes/interfaces inherited from class java.lang.Thread

`Thread.State, Thread.UncaughtExceptionHandler`

## Field Summary

### Fields inherited from class java.lang.Thread

`MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY`

## Constructor Summary

Constructors
Constructor
Description
`WikiBackgroundThread(org.apache.wiki.api.core.Engine engine, int sleepInterval)`
Constructs a new instance of this background thread with a specified sleep interval, and adds the new instance to the wiki engine's event listeners.

## Method Summary

Modifier and Type
Method
Description
`final void`
`actionPerformed(org.apache.wiki.event.WikiEvent event)`
Listens for `WikiEngineEvent.SHUTDOWN` and, if detected, marks the thread for death.
`abstract void`
`backgroundTask()`
Abstract method that performs the actual work for this background thread; subclasses must implement this method.
`org.apache.wiki.api.core.Engine`
`getEngine()`
Returns the Engine that created this background thread.
`final void`
`run()`
Runs the background thread's `backgroundTask()` method at the interval specified at construction.
`void`
`shutdown()`
Requests the shutdown of this background thread.
`void`
`shutdownTask()`
Executes a task after shutdown signal was detected.
`void`
`startupTask()`
Executes a task just after the thread's `Thread.run()` method starts, but before the `backgroundTask()` task executes.

### Methods inherited from class java.lang.Thread

`activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield`

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

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

## Constructor Details

### WikiBackgroundThread

public WikiBackgroundThread(org.apache.wiki.api.core.Engine engine, int sleepInterval)
Constructs a new instance of this background thread with a specified sleep interval, and adds the new instance to the wiki engine's event listeners.

Parameters:
  `engine` - the wiki engine
  `sleepInterval` - the interval between invocations of the thread's `Thread.run()` method, in seconds

## Method Details

### actionPerformed

public final void actionPerformed(org.apache.wiki.event.WikiEvent event)
Listens for `WikiEngineEvent.SHUTDOWN` and, if detected, marks the thread for death.

Specified by:
  `actionPerformed` in interface `org.apache.wiki.event.WikiEventListener`
Parameters:
  `event` -
See Also:
  - `WikiEventListener.actionPerformed(org.apache.wiki.event.WikiEvent)`

### backgroundTask

public abstract void backgroundTask() throws Exception
Abstract method that performs the actual work for this background thread; subclasses must implement this method.

Throws:
  `Exception` - Any exception can be thrown

### getEngine

public org.apache.wiki.api.core.Engine getEngine()
Returns the Engine that created this background thread.

Returns:
  the wiki engine

### shutdown

public void shutdown()
Requests the shutdown of this background thread. Note that the shutdown is not immediate.

Since:
  2.4.92

### run

public final void run()
Runs the background thread's `backgroundTask()` method at the interval specified at construction. The thread will initially pause for a full sleep interval before starting, after which it will execute `startupTask()`. This method will cleanly terminate the thread if it has previously been marked as dead, before which it will execute `shutdownTask()`. If any of the three methods return an exception, it will be re-thrown as a `InternalWikiException`.

Specified by:
  `run` in interface `Runnable`
Overrides:
  `run` in class `Thread`
See Also:
  - `Thread.run()`

### shutdownTask

public void shutdownTask() throws Exception
Executes a task after shutdown signal was detected. By default, this method does nothing; override it to implement custom functionality.

Throws:
  `Exception` - Any exception can be thrown.

### startupTask

public void startupTask() throws Exception
Executes a task just after the thread's `Thread.run()` method starts, but before the `backgroundTask()` task executes. By default, this method does nothing; override it to implement custom functionality.

Throws:
  `Exception` - Any exception can be thrown.