在哪里处理线程中断

Pab*_*blo 0 java multithreading java-8

我有一个Java 8应用程序,我在一个线程上运行一个任务:

Thread t = new Thread(() -> { runTask();
                              finalizeTask(); });
t.start()
saveThread(t);
Run Code Online (Sandbox Code Playgroud)

在某些时候,从不同的线程,这个任务可能会被中断:

Thread t = getThread(); // Obtains thread t
t.interrupt();
Run Code Online (Sandbox Code Playgroud)

有了这个,我希望runTask();线路被中断,但我还是喜欢finalizeTask();运行.

如何捕获线程中断并处理它?

Jai*_*ash 7

你最后可以使用try catch.

try {
    runTask();
} 
catch (InterruptedException e) {
    // Log etc.
} 
finally {
    finalizeTask();
}
Run Code Online (Sandbox Code Playgroud)

这将确保始终执行finalizeTask.

  • 值得一提的是,除非`runTask`在一个抛出`InterruptedException`的特定操作中等待,否则它需要通过检查标志来处理中断. (4认同)