Nếu một InterruptedException
được ném, nó có nghĩa là một cái gì đó muốn làm gián đoạn (thường kết thúc) luồng đó. Điều này được kích hoạt bởi một cuộc gọi đến interrupt()
phương thức luồng . Phương thức chờ phát hiện điều đó và ném InterruptedException
mã bắt để có thể xử lý yêu cầu chấm dứt ngay lập tức và không phải đợi cho đến khi hết thời gian quy định.
Nếu bạn sử dụng nó trong một ứng dụng đơn luồng (và cả trong một số ứng dụng đa luồng), ngoại lệ đó sẽ không bao giờ được kích hoạt. Bỏ qua nó bằng cách có một điều khoản bắt trống mà tôi không khuyên bạn nên làm. Việc ném nó InterruptedException
sẽ xóa trạng thái bị gián đoạn của chuỗi, vì vậy nếu không được xử lý đúng cách, thông tin đó sẽ bị mất. Do đó, tôi đề xuất chạy:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Mà thiết lập lại trạng thái đó. Sau đó, kết thúc thực hiện. Đây sẽ là hành vi đúng đắn, thậm chí không bao giờ được sử dụng.
Điều gì có thể tốt hơn là thêm điều này:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... câu lệnh cho khối bắt. Về cơ bản, điều đó có nghĩa là nó không bao giờ được xảy ra. Vì vậy, nếu mã được sử dụng lại trong một môi trường mà nó có thể xảy ra, nó sẽ phàn nàn về nó.