multithreading - 为什么线程中断方法没有中断其 sleep 方法?

标签 multithreading

我下面有这个程序

package com;
public class ThreadDemo implements Runnable {
    @Override
    public void run() {
        while(true)
        {
            try {
                System.out.println("Into sleep");
                Thread.sleep(1000000000);
                System.out.println("Out of sleep");
                } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String args[]) {
        ThreadDemo tD = new ThreadDemo();
        Thread t1 = new Thread(tD);
        t1.start();
        t1.interrupt();
    }
}

我已经启动了线程,并将调用它的run方法,并在上述指定的几秒钟内进入休眠状态。

我叫t1.interrupt();
这是屏幕截图

我的问题是为什么

1.线程不退出 sleep 状态吗?
  • 为什么Into sleep打印两次?
  • 最佳答案

    您处于循环中:

  • 您正在 sleep
  • 被打断并打印堆栈跟踪
  • 回到 sleep
  • 永不再次被打断

  • 因此它是“即将退出 sleep 状态”(否则您将看不到堆栈跟踪)-但是您随后要再次调用Thread.sleep

    如果您只想 sleep 一次,请摆脱循环...

    关于multithreading - 为什么线程中断方法没有中断其 sleep 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144586/

    相关文章:

    c++ - 为每种参数类型重新定义相同模式的函数

    java - 每 X 秒重新加载一次 JPanel(使用线程?)

    multithreading - 如何将图像传递给函数?

    java - 多线程 java 应用程序有时无法在 Websphere 上获取所有线程

    c# - Interlocked.Increment 实际上在做什么?

    IOS:后台操作期间主线程变慢

    python - 如何检查 Python 中当前正在运行的线程数?

    Java多线程同步

    java - 服务在线程中运行

    java - 线程 "Basic L&F File Loading Thread"中出现异常