java - 我如何理解 Thread.interrupt()?

标签 java multithreading jvm

java中有两个代码块。

block 一:

@Test
public void test1() {

    System.out.println("interrupt:" + Thread.currentThread().isInterrupted());
    Thread.currentThread().interrupt();
    System.out.println("interrupt:" + Thread.currentThread().isInterrupted());

}

输出:

interrupt:false
interrupt:true

第二 block :

@Test
public void test2() throws InterruptedException {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("running...");
        }
    });

    thread.interrupt();

    TimeUnit.SECONDS.sleep(2);

    System.out.println("interrupt:" + thread.isInterrupted());

    thread.start();

    TimeUnit.SECONDS.sleep(2);

    System.out.println("interrupt:" + thread.isInterrupted());

}

输出:

interrupt:false
running...
interrupt:false

所以,我的问题:

  1. 为什么在调用 interrupt() 后阻塞一个打印 interrupt:true 但不阻塞两个?
  2. JVM 在调用 interrupt() 后会做什么?

谢谢!

附言:第三 block :

@Test
public void test3() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("running...");
        }
    });

    thread.interrupt();

    System.out.println("interrupt:" + thread.isInterrupted());

    // thread.start();
    //
    // thread.interrupt();
    //
    //
    // System.out.println("interrupt:" + thread.isInterrupted());

}

同时输出:interrupt:false

最佳答案

  • 在 block 1 中,您自己打断,这会用中断标记“标记”线程。
  • 在 block 2 中,您中断了其他线程(不活动 - 未启动 -)

尝试在 run() 方法中添加 Thread.sleep(5000);并在中断前开始 ;-)

How interrupt works

关于java - 我如何理解 Thread.interrupt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182585/

相关文章:

java - 从静态内部类访问外部类的静态变量

java - 从本地spark-submit检查远程HDFS上是否存在文件

java - 如何在运行时发出和执行 Java 字节码?

c# - 位图线程安全只读吗?

multithreading - 这里需要 volatile 吗?

java - 在Java中以编程方式杀死进程

java - JVM退出代码10的含义

java - 如何在一个简单的java程序中替换spring属性占位符

performance - 如何在 Scala 中近似数据结构的大小?

java - 为什么一个采用可变参数的方法只有在它是静态的情况下才能被优化为一系列单态调用?