Есть ли способ прервать будущее, не отменяя его?
логическое отмена (логическое mayInterruptIfRunning)
Пытается отменить выполнение этой задачи. Эта попытка не удастся, если задача уже завершена, уже отменена или не может быть отменена по какой-либо другой причине. В случае успеха, и эта задача не была запущена при вызове отмены, эта задача никогда не должна запускаться. Если задача уже запущена, то параметр mayInterruptIfRunning определяет, следует ли прервать поток, выполняющий эту задачу, при попытке остановить задачу.
Чтобы перехватить прерывание, мы должны правильно перехватить прерванное исключение или проверить метод isInterrupted () в методе Runnable / Callable.
Но нет возможности прервать работу Future с помощью интерфейса Future.
Поскольку все потоки находятся в пуле службы исполнителя, никто не может выполнять thread.interrupt (). Поэтому предполагалось, что любое прерывание произойдет только тогда, когда Future отменяется или пул потоков завершается?
Я пытаюсь понять, почему в интерфейсе Future нет метода прерывания. Любая помощь будет оценена
Future.cancel()
действительно используетThread.interrupt()
под капотом, поэтому я не понимаю вашу попытку различить 2. вы путаетеThread.interrupt()
сThread.stop()
? - person jtahlborn   schedule 18.01.2012Thread.stop()
метода, который может вызвать очень неожиданные побочные эффекты. Спасибо! :) - person Rekin   schedule 18.01.2012Future
запускал и просматривал новый поток. Затем вы можете ответить на нормальный флаг прерывания, остановив второй поток. Таким извращенным способом вы могли вернуть управление в настройках Future. Я здесь не спорю, хорошо это или плохо, я только показываю, что это возможно. - person Rekin   schedule 18.01.2012