我最近继承了一个几乎没有Thread安全性的大型Java应用程序.我目前正在努力的是让所有线程正确处理被中断而不是使用非常糟糕的Thread.stop().
问题的一部分是我不知道每个方法调用清除中断标志.
目前我知道以下将清除中断标志:
Thread.interrupted()
Thread.sleep(long)
Thread.join()
Thread.join(long)
Object.wait()
Object.wait(long)
Run Code Online (Sandbox Code Playgroud)
我还缺少什么?谢谢
当线程被终止 ( Thread.State.TERMINATED) 时,它仍然没有被中断。为什么?
我找到了这个,我找到了这个,但都没有回答我的问题。我已经在 OpenJDK 11 和 Oracle JDK 16 上尝试过这个 - 没有区别,结果相同。
我已经使用 Java 10 多年了,多线程任务对我来说一直很清楚;然而,意外地,我遇到了一些奇怪的事情(对我来说),我很想知道。
我明白了,那private volatile boolean interrupted;是刚刚下课的标志(场)Thread,这我能在结合使用interrupt()时,以代码的一些逻辑了的情况下isInterrupted()获得true。
但是,为什么Thread.State.TERMINATEDstate 不也创建相同的线程interrupted?
public class MainClass {
public static void main(String[] args) throws Exception {
Thread alfa = new Thread(() -> {
for (int i = 0; i < 3; i++) {
System.out.println(i + ". " + Thread.currentThread().getName() + …Run Code Online (Sandbox Code Playgroud)