2012-12-07 29 views
5

Nếu một ngoại lệ chưa được thực hiện được ném trong khi thực hiện móc tắt trong java, hãy thoát jvm ngay lập tức mà không cần chạy phần còn lại của móc tắt đã đăng ký (nếu có) ? Từ javadocs:Điều gì sẽ xảy ra khi một ngoại lệ được ném vào trong móc tắt máy trong java

trường hợp ngoại lệ của router được xử lý trong móc tắt máy cũng giống như trong bất kỳ thread khác, bằng cách gọi phương thức của đối tượng uncaughtException ThreadGroup của chủ đề. Việc cài đặt mặc định của phương thức này sẽ in ra dấu vết ngăn xếp của ngoại lệ đối với System.err và chấm dứt luồng đó; nó không làm cho máy ảo thoát hoặc dừng lại.

nó có vẻ như móc tắt máy khác nên chạy ...

Như một câu hỏi theo dõi, có lẽ không phải là một ý tưởng tốt để có một đoạn mã có tiềm năng có thể ném một ngoại lệ trong móc tắt máy? Nếu bạn không thể tránh nó, nó là một thực hành tốt để cố gắng nắm bắt ngoại lệ bên trong móc tắt máy?

Trả lời

5

Vì phương thức addShutdownHook nhận một Chủ đề, mỗi móc tắt riêng lẻ là một Chỉ của riêng nó. Hành vi mặc định cho các ngoại lệ chưa được bắt buộc là in một thông báo lỗi và chấm dứt Chủ đề. Vì các hook có cùng một hành vi, một hook shutdown duy nhất kết thúc do lỗi sẽ không ngăn cản người khác chạy.

Lưu ý rằng tôi chưa thực sự thử nghiệm điều này ...

+1

Cảm ơn! Tôi đã thử nghiệm hành vi này, bạn là đúng, một ngoại lệ trong một móc tắt máy cụ thể không ngăn cản các móc khác chạy. –

1

Mã chạy bên trong móc tắt máy phải tuân theo cùng các phương pháp hay nhất như mã chạy trong chuỗi chính của bạn: Nắm bắt ngoại lệ nếu bạn cần, đăng nhập nếu bạn cần hoặc để ngoại lệ chỉ in thành chế độ xuất chuẩn.

+0

Ah, điều đó có ý nghĩa. –

Các vấn đề liên quan