Class ShutdownHooks
The ShutdownHooks class provides a centralized mechanism for registering tasks that should be executed when the JVM shuts down. It manages a single shutdown hook thread that executes all registered tasks in the reverse order of their registration.
This class is particularly useful for terminal applications that need to perform cleanup operations when the application is terminated, such as restoring the terminal to its original state, closing open files, or releasing other resources.
Tasks are registered using the add(Task)
method and can be removed using
the remove(Task)
method. All tasks must implement the ShutdownHooks.Task
interface,
which defines a single ShutdownHooks.Task.run()
method that is called when the JVM shuts down.
Example usage:
// Create a task to restore the terminal on shutdown ShutdownHooks.Task task = ShutdownHooks.add(() -> { terminal.setAttributes(originalAttributes); terminal.close(); }); // Later, if the task is no longer needed ShutdownHooks.remove(task);
- Since:
- 2.7
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Essentially aRunnable
which allows running to throw an exception. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T extends ShutdownHooks.Task>
Tadd
(T task) Adds a task to be executed when the JVM shuts down.static void
remove
(ShutdownHooks.Task task)
-
Constructor Details
-
ShutdownHooks
public ShutdownHooks()
-
-
Method Details
-
add
Adds a task to be executed when the JVM shuts down.This method registers a task to be executed when the JVM shuts down. Tasks are executed in the reverse order of their registration, so the most recently added task will be executed first.
If this is the first task to be added, a shutdown hook thread will be created and registered with the JVM. This thread will execute all registered tasks when the JVM shuts down.
- Type Parameters:
T
- the type of the task- Parameters:
task
- the task to be executed on shutdown- Returns:
- the task that was added (for method chaining)
- Throws:
NullPointerException
- if the task is null
-
remove
-