我在下面有这个程序
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();
}
}
我已启动Thread,并将调用其run方法并进入上述指定秒数的休眠状态。
我致电t1.interrupt();
这是截屏
我的问题是为什么
1.线程是否未进入睡眠状态?
Into sleep
被打印两次?答案 0 :(得分:4)
你在循环中:
所以 "退出睡眠状态" (否则你不会看到堆栈跟踪) - 但是你再次调用Thread.sleep
。
如果你只想睡一次,摆脱循环......
答案 1 :(得分:1)
1.线程是否已退出睡眠状态?
他实际上只是
System.out.println("Out of sleep");
永远不会执行,因为当你中断Thread.sleep(10000)时;抛出异常并
e.printStackTrace();
执行