2010-08-02 31 views
9

Trong Java, Thread.sleep() ném InterruptedException. Điều gì là thích hợp để làm với ngoại lệ này?InterruptedException từ Thread.sleep()

Tôi có nên

  1. tuyên truyền ngoại trừ lên chuỗi cuộc gọi?
  2. nuốt ngoại lệ?
  3. đang làm điều gì đó khác (vui lòng đề xuất)?
+2

Phụ thuộc vào lý do ngoại lệ xảy ra. Đây có phải là một câu hỏi lý thuyết hay bạn có một trường hợp sử dụng trong tâm trí? –

+0

Bài viết này có thể giúp bạn hiểu cơ chế này: [Bạn làm gì với gián đoạn ngoại lệ?] (Http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256

Trả lời

9

Bạn nên tính lại ngoại lệ.

Đây là một bản tóm tắt từ Brian Goetz, tác giả của cuốn sách tuyệt vời "Java Concurrency in Practice":

Đối phó với InterruptedException:

Nếu ném InterruptedException nghĩa rằng một phương pháp là một phương pháp chặn , sau đó gọi phương thức chặn nghĩa là rằng phương pháp của bạn cũng là phương pháp chặn và bạn cần có chiến lược để xử lý InterruptedExc eption. Thường thì chiến lược đơn giản nhất là để ném InterruptedException chính mình, như hiển thị trong putTask() và getTask() phương pháp trong Liệt kê 1. Làm như vậy làm cho phương pháp của bạn đáp ứng với sự gián đoạn như tốt và thường đòi hỏi gì hơn vì thêm InterruptedException đến mệnh đề ném của bạn.

Xem: Dealing with InterruptedException

+2

Một khả năng khác là phải khẳng định trạng thái ngắt ngay lập tức. Thread.currentThread(). Interrupt(). Điều này đôi khi hữu ích nếu bạn không kiểm soát API đang được gọi (có thể bạn đang triển khai một số giao diện bên thứ 3), nhưng bạn muốn trạng thái ngắt được giữ nguyên để có thể "chú ý" là phương pháp kiểm tra/chặn sau . –

0

Nếu tất cả các bạn đang cố gắng làm là đốt cháy một thời gian, tôi sẽ đề nghị chỉ đánh bắt và bỏ qua ngoại lệ.

Nếu, mặt khác, bạn cần thời gian chờ đợi thích hợp và bất kỳ gián đoạn ưu tiên nào là REALLY BAD cho chương trình của bạn, sau đó bạn chắc chắn phải trả lại ngoại lệ.

Nó chỉ phụ thuộc vào lý do tại sao ngoại lệ xảy ra và trường hợp sử dụng của bạn là Thread.sleep() ngay từ đầu.

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