Можно ли прерывать Thread на Android без вызова interrupt ()? - PullRequest
1 голос
/ 20 апреля 2020

Имейте в виду, что все это происходит в Android devide.

  1. У меня есть однопоточная ExecutorService, созданная Executors.newSingleThreadExecutor.
  2. ThreadFactory при передаче этого вызова создается пользовательский подкласс Thread, назовем его InterruptionTracingThread
  3. В InterruptionTracingThread вызов interrupt() переопределяется следующим образом:
@Override
public void interrupt() {
    interruptionOrigin = new Throwable();
    super.interrupt(); 
}

, где interruptionOrigin - это обнуляемое поле Throwable в InterruptionTracingThread.

Учитывая все это, со мной происходит нечто странное: я использую ExecutorService, чтобы выполнить одну задачу, вызвав submit() и затем get() на возвращенном Future. По какой-то неизвестной (для меня) причине я получаю InterruptedException во время выполнения задачи и ловлю ее, но каким-то образом interruptionOrigin равен null, что означает, что interrupt() никогда не вызывался!

Как прервать Thread без вызова interrupt()?

...