Shutdown Hook có thể được sử dụng để thực hiện dọn sạch tài nguyên hoặc lưu trữ trạng thái khi JVM tắt bình thường hoặc đột ngột. Thực hiện dọn sạch tài nguyên có nghĩa là đóng file log, gửi một số cảnh báo hoặc cái gì đó khác. Vì vậy, nếu bạn muốn thực hiện một vài dòng code trước khi JVM tắt, sử dụng shutdown hook.
Nội dung chính
Khi nào JVM đóng lại?
JVM đóng lại khi:
- Người dụng nhấn ctrl+c trên command prompt
- Phương thức System.exit(int) được gọi
- Người dùng logoff
- Người dùng shutdown vv.
Phương thức addShutdownHook(Thread hook)
Phương thức addShutdownHook(Thread hook) của lớp RunTime được sử dụng để đăng ký thread với Virtual Machine. Cú pháp:
public void addShutdownHook(Thread hook){}
Đối tượng của lớp RunTime có thể tạo bằng cách gọi phương thức static getRuntime(). Ví dụ:
Runtime r = Runtime.getRuntime();
Phương thức Factory
Phương thức trả về thể hiện của một lớp được gọi là phương thức factory.
Ví dụ về Shutdown Hook trong java
File: TestShutdown1.java
class MyThread extends Thread { public void run() { System.out.println("shut down hook task completed.."); } } public class TestShutdown1 { public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); r.addShutdownHook(new MyThread()); System.out.println("Now main sleeping... press ctrl+c to exit"); try { Thread.sleep(3000); } catch (Exception e) { } } }
Output:
Now main sleeping... press ctrl+c to exit shut down hook task completed..
Ví dụ tương tự về Shutdown Hook bởi lớp ẩn danh (annonymous)
File: TestShutdown2.java
public class TestShutdown2 { public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); r.addShutdownHook(new Thread() { public void run() { System.out.println("shut down hook task completed.."); } }); System.out.println("Now main sleeping... press ctrl+c to exit"); try { Thread.sleep(3000); } catch (Exception e) { } } }
Output:
Now main sleeping... press ctrl+c to exit shut down hook task completed..