【问题标题】:Why is that Thread interupt method is not breaking its sleep method?为什么那个线程中断方法没有破坏它的睡眠方法?
【发布时间】:2014-10-01 15:11:22
【问题描述】:

我下面有这个程序

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();
    }
}

我已经启动了线程,并且将调用它的运行方法并在上述指定的秒数内进入睡眠状态。

我已经打电话给t1.interrupt();

这是截图

我的问题是为什么

1.线程没有脱离睡眠状态?

  1. 为什么Into sleep 会打印两次??

【问题讨论】:

    标签: multithreading


    【解决方案1】:

    你陷入了循环:

    • 你在睡觉
    • 被中断并打印堆栈跟踪
    • 回去睡觉
    • 再也不会被打扰

    所以它“走出睡眠状态”(否则你不会看到堆栈跟踪) - 但你会再次调用Thread.sleep

    如果你只想睡一次,摆脱循环......

    【讨论】:

    • :) 我永远不会发现这个。非常感谢。
    【解决方案2】:

    1.线程没有脱离睡眠状态?

    他其实只是

    System.out.println("Out of sleep");
    

    永远不会执行,因为当您中断 Thread.sleep(10000);抛出异常并

    e.printStackTrace();
    

    改为执行

    【讨论】:

      猜你喜欢
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2014-05-15
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多