Po co ustawić bit przerwań w Callable
Więc ten zasób (http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html) sugeruje ustawienie bitu przerwania w wątku, gdy wątek nie obsługuje samego przerwania,aby kod znajdujący się wyżej na stosie wywołań mógł dowiedzieć się o przerwie i odpowiedzieć na nią, jeśli chce. ”
Powiedzmy, że używam ExecutorService do uruchomienia czegoś w innym wątku. Konstruuję Callable i przekazuję ten Callable do ExecutorService.submit (), który zwraca Future. Jeśli Callable zostanie przerwany, a następnie zresetuje bit przerwania, powiązana Future nie wyśle wyjątku InterruptedException, gdy zostanie wywołany Future.get (). Więc jaki byłby cel ustawienia przerywanego bitu w Callable, jeśli ta przyszłość jest jedynym sposobem, w jaki główny wątek ma dostęp do utworzonego wątku.
class MyCallable implements Callable<String> {
@Override
public String call() {
while (!Thread.currentThread().isInterrupted()) {
}
Thread.currentThread().interrupt();
return "blah";
}
}
ExecutorService pool = makeService();
Future<String> future = pool.submit(new MyCallable());
// Callable gets interrupted and the Callable resets the interrupt bit.
future.get(); // Does not thrown an InterruptedException, so how will I ever know that the Callable was interrupted?