以下Java程序的异常行为

时间:2018-12-25 17:28:58

标签: java multithreading

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

1 个答案:

答案 0 :(得分:2)

public void printStackTrace()
     

打印此throwable及其回溯到标准错误流。

您将值打印到标准输出流,因此基本上涉及到两个流。由于它们在不同的时间刷新,因此消息的顺序确实不可预测。

运行该代码段几次,您可能会很幸运,并看到了期望的顺序:)