在以下Java程序中,Thread.sleep(1000)
在for循环之后被调用。但是,在打印所有值之前它会被打断。在run方法内部,它应该打印所有值,然后进入睡眠状态,为什么我收到以下Java程序的意外行为。
输出:
java.lang.InterruptedException: sleep interrupted
Value=0
at java.lang.Thread.sleep(Native Method)
Value=1
at com.thread.TestThread.run(InterruptThread.java:21)
Value=2
Value=3
Value=4
Value=5
Value=6
Value=7
Value=8
Value=9
程序中断
public class InterruptThread {
public static void main(String[] args) {
TestThread thread = new TestThread();
thread.start();
thread.interrupt();
}
}
class TestThread extends Thread{
@Override
public void run() {
try {
for(int i=0; i<10; i++){
System.out.println("Value="+ i);
}
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Thread is interrupted");
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
public void printStackTrace()
打印此throwable及其回溯到标准错误流。
您将值打印到标准输出流,因此基本上涉及到两个流。由于它们在不同的时间刷新,因此消息的顺序确实不可预测。
运行该代码段几次,您可能会很幸运,并看到了期望的顺序:)