Thật không may, không, java.io.*
lớp không đáp ứng với sự gián đoạn khi họ bị chặn ở chế độ đọc hoặc viết phương pháp. Thông thường những gì bạn phải làm là đóng luồng và sau đó xử lý các IOException
được ném. Tôi có mô hình này lặp đi lặp lại suốt mã của tôi:
try {
for (;;) {
try {
inputStream.read(data);
thread.join();
}
catch (IOException exception) {
// If interrupted this isn't a real I/O error.
if (Thread.interrupted()) {
throw new InterruptedException();
}
else {
throw exception;
}
}
}
}
catch (InterruptedException exception) {
}
Ngoài ra các java.nio.*
lớp mới làm gián đoạn xử lý tốt hơn và tạo ra InterruptedIOException
s khi họ đang bị gián đoạn. Lưu ý rằng ngoại lệ này bắt nguồn từ IOException
chứ không phải từ InterruptedException
vì vậy, bạn có thể cần hai mệnh đề catch
để xử lý một trong hai loại ngoại lệ, một cho InterruptedException
và một cho InterruptedIOException
. Và bạn sẽ muốn có bất kỳ khoản IOException
bắt bên trong để bỏ qua InterruptedIOException
s.
Nguồn
2009-10-13 16:32:54
Thông thường, bạn không nhận được bất cứ điều gì. – erickson
NB Các từ lâu lỗi đã được giải quyết trong năm 2011: "Đây không còn là một vấn đề trong JDK7 vì di sản ngắt I/O được tắt theo mặc định trên Solaris Nó không bao giờ được thực hiện trên Winodws, và không được triển khai trên Linux từ jdk1.. 3. " – EJP