Java Shutdown Hook
What is a Shutdown Hook?
- A shutdown hook is a special Java feature that allows you to run a piece of code when the Java Virtual Machine (JVM) is shutting down.
- It can be useful for cleaning up resources, saving data, or performing other important tasks before the application exits.
Key Concepts
- JVM Shutdown: The JVM shuts down when the program ends, either due to normal execution, user termination (e.g., Ctrl+C), or a system shutdown.
- Thread for Cleanup: A shutdown hook is essentially a thread that runs when the JVM is shutting down.
How to Create a Shutdown Hook
- Extend the Thread Class: Create a class that extends
Thread
and override its run()
method with the code you want to execute during shutdown. - Register the Hook: Use
Runtime.getRuntime().addShutdownHook(Thread thread)
to register your shutdown hook.
Example:
public class MyShutdownHook extends Thread {
public void run() {
System.out.println("Shutdown Hook is running!");
// Cleanup code here
}
public static void main(String[] args) {
MyShutdownHook hook = new MyShutdownHook();
Runtime.getRuntime().addShutdownHook(hook);
System.out.println("Application is running...");
// Simulating application work
try {
Thread.sleep(2000); // Sleep for 2 seconds
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Application is ending...");
}
}
Important Notes
- Order of Execution: If there are multiple shutdown hooks, they execute in the order they were registered.
- No Guarantees: There is no guarantee that the shutdown hook will execute in certain situations, such as a crash or forced termination.
- Keep it Short: The shutdown hook should complete quickly to avoid delaying the shutdown process.
Conclusion
- Shutdown hooks are a powerful feature in Java that help manage resource cleanup during application termination.
- They provide a way to ensure that important tasks are completed even as the application is shutting down.