[英]Unexpected behavior of the following Java program
在下面的 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();
}
}
}
public void printStackTrace()
将此 throwable 及其回溯打印到标准错误流。
您将值打印到标准输出流,因此您基本上涉及两个流。 由于它们在不同时间刷新,因此消息的顺序确实不可预测。
多次运行该代码段,您可能会很幸运并看到您期望的顺序:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.