Предположим, у меня есть сторонняя библиотека Java, вызванная в Task
, представленная на ExecutorService
.Как обрабатывать сторонний код Java в задаче, представленной ExecutorService, в случае, если она имеет бесконечный цикл
Я доверяю сторонней библиотеке, чтобы она не была злонамеренной, но есть редкий шанс, что есть ошибки программирования, которые могут заставить ее застревать в бесконечном цикле, и если это так, я не могу ее исправить для решения этих редких случаев.
Каков наилучший способ справиться с этим, чтобы приложение не застревало? Есть shutdownNow()
достаточно хорошо, чтобы справиться с этой ситуацией?
Существует связанная с этим проблема Stop an infinite loop in an ExecutorService task, но это зависит от способности кооператора работать и обнаруживать Thread.currentThread().isInterrupted()
, чтобы остановить обработку, на которую я не могу положиться.
(В моем случае это Jython код;. В ранней версии Jython the interpreter apparently didn't check Thread.currentThread().isInterrupted()
, не уверен, что он делает сейчас ... но мой вопрос вообще для любой третьих сторон Java коды)
hmmm .. может быть дубликат http://stackoverflow.com/questions/10853305/how-to-stop-long-duration-execution-task- например, бесконечный цикл-выполнение-внутри, но я не уверен. –
«положить в состояние проверки цикла при прерывании» - я не могу, если такой цикл существует, он находится в стороннем коде. –
@efekctive Это не имеет большого значения - если вы завершите метод в runnable: 'run() {run3rdParty(); } 'и' run3rdParty' никогда не возвращается, вы не можете сделать много: если вы вставляете проверку прерывания, она не будет выполнена. – assylias