자바.lang.Runtime.addShutdownHook()갈고리 프로그램 을 이용 하여 자바 프로그램 이 안전하게 종료 되도록 합 니 다.
9682 단어 shutdown
(탈퇴 란 ctrl+c 또는 kill-15 를 말 합 니 다.그러나 kill-9 를 사용 하면 어 쩔 수 없습니다.구체 적 으로 kill 과 관련 된 signal 체제 에 큰 소 가 있 는 글 이 있 습 니 다《Linux 신호 신호 처리 메커니즘》)갈 고 리 는 어떤 조작 을 해도 됩 니 다.심지어 특정한 스 레 드 의 상 태 를 순환 적 으로 검사 할 수 있 습 니 다.업무 스 레 드 가 정상적으로 탈퇴 할 때 까지 갈고리 절 차 를 마치 면 업무 스 레 드 의 완전 성 을 확보 할 수 있 습 니 다.
예 프로그램 은 다음 과 같 습 니 다.
인 스 턴 스 프로그램 은 실행 과정 에서 ctrl-c 또는 kill-15 를 누 르 고 갈고리 프로그램의 순환 검 측 으로 인해 스 레 드 가 실 행 된 후에 야 프로그램 이 닫 힐 수 있 습 니 다.
1 /**
2 * Created by IntelliJ IDEA.
3 * User: Luo
4 * Date: 13-7-11
5 * Time: 3:12
6 */
7
8 public class TestShutdownHook {
9
10 /**
11 * ,
12 */
13 private static class TaskThread extends Thread {
14 @Override
15 public void run() {
16 System.out.println("thread begin ...");
17 TestShutdownHook.sleep(1000);
18 System.out.println("task 1 ok ...");
19 TestShutdownHook.sleep(1000);
20 System.out.println("task 2 ok ...");
21 TestShutdownHook.sleep(1000);
22 System.out.println("task 3 ok ...");
23 TestShutdownHook.sleep(1000);
24 System.out.println("task 4 ok ...");
25 TestShutdownHook.sleep(1000);
26 System.out.println("task 5 ok ...");
27
28 System.out.println("thread end
");
29 }
30 }
31
32 /**
33 * hook ,
34 * @param checkThread
35 */
36 private static void addShutdownHook(final Thread checkThread) {
37 // TaskThread , ShutdownHook
38 Runtime.getRuntime().addShutdownHook(new Thread() {
39 public void run() {
40 System.out.println(" ,hook , ...");
41 // , , , \
42 for (int i = 0; i < 100; i++) {
43 if (checkThread.getState() == State.TERMINATED) {
44 System.out.println(" , hook");
45 return;
46 }
47 TestShutdownHook.sleep(100);
48 }
49 System.out.println(" , , hook, ");
50 }
51 });
52 }
53
54
55 private static void sleep(long millis) {
56 try {
57 Thread.sleep(millis);
58 } catch (InterruptedException e) {
59 e.printStackTrace();
60 }
61 }
62
63 public static void main(String[] args) throws InterruptedException {
64 final TaskThread taskThread = new TaskThread();
65 // TaskThread , ShutdownHook
66 addShutdownHook(taskThread);
67 // TaskThread
68 taskThread.start();
69 }
70
71 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
명령 프롬프트를 사용하여 컴퓨터를 종료하는 방법?때로는 Windows 버그로 인해 상황이 발생할 수 있습니다. 이러한 상황을 극복하기 위해 가장 효율적이고 시간이 적게 걸리는 다양한 종료 방법이 있습니다. 이 기사에서는 이러한 방법 중 하나를 여러 가지 방법으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.