Имейте в виду, что все это происходит в Android devide.
- У меня есть однопоточная
ExecutorService
, созданная Executors.newSingleThreadExecutor
. ThreadFactory
при передаче этого вызова создается пользовательский подкласс Thread
, назовем его InterruptionTracingThread
- В
InterruptionTracingThread
вызов interrupt()
переопределяется следующим образом:
@Override
public void interrupt() {
interruptionOrigin = new Throwable();
super.interrupt();
}
, где interruptionOrigin
- это обнуляемое поле Throwable
в InterruptionTracingThread
.
Учитывая все это, со мной происходит нечто странное: я использую ExecutorService
, чтобы выполнить одну задачу, вызвав submit()
и затем get()
на возвращенном Future
. По какой-то неизвестной (для меня) причине я получаю InterruptedException
во время выполнения задачи и ловлю ее, но каким-то образом interruptionOrigin
равен null
, что означает, что interrupt()
никогда не вызывался!
Как прервать Thread
без вызова interrupt()
?