Trong Effective Java (trang 275), có đoạn mã này:Tại sao bạn lại bắt được InterruptedException để gọi Thread.currentThread.interrupt()?
...
for (int i = 0; i < concurrency; i++) {
executor.execute(new Runnable() {
public void run() {
ready.countDown();
try {
start.await();
action.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
done.countDown();
}
}
}
...
việc sử dụng bắt ngoại lệ bị gián đoạn chỉ để lại nuôi nó là gì? Tại sao không chỉ để nó bay?
Giả sử bạn muốn chuỗi thực sự bị gián đoạn. Bạn chỉ có thể nắm bắt và nuốt các trường hợp ngoại lệ cũng sẽ ngăn chặn sự gián đoạn thread. –
Bạn có nghĩa là nó không có trong chữ ký của Runnable. Thay vào đó, tôi sẽ sử dụng một cuộc gọi. Ngoài ra - gọi Thread.currentThread(). Interrupt() sẽ không ném ngoại lệ đó? Vì vậy, những gì là điểm trong ném nó? – ripper234
Tôi tin rằng bạn có nghĩa là 'InterruptedException' là một ngoại lệ được kiểm tra và không có chữ ký của' Runnable.run() '(không phải' Executor.execute'). – Tom