为什么这个并发执行总是给我相同的跟踪?

时间:2017-04-02 10:04:45

标签: java concurrency

我正在尝试理解Java中的并发执行,但是给出了这段代码:

class Inter extends Thread {
    public void run() { 
        System.out.println("Starting..."); 
        try {
            sleep(10000);
        } catch (InterruptedException e) {
            System.out.println("Interrupted."); }
        System.out.println("Finished."); 
    }

    public static void main(String[] args) {
        Inter hi = new Inter();
        hi.start();
        System.out.println("Sending interruption..."); 
        hi.interrupt();
        System.out.println("Sent."); 
    }
}

我不知道为什么总要给我这个痕迹:

Sending interruption...
Sent.
Starting...
Interrupted.
Finished.

无论我跑多少次:

$ java Inter

正如我在Java中所知,当我们在新线程中执行start()方法时,会开始执行此线程。

那么,由于主线程和Inter线程是同时执行的,为什么不能将它作为可能的跟踪,?

Starting..
Sending interruption..
Sent
Interrupted
Finished

1 个答案:

答案 0 :(得分:1)

  

那么,由于主线程和Inter线程是同时执行的,为什么这不可能是一个可能的跟踪?

是的,它可以。如果你运行你的程序一千次,很可能你将至少输出一次。

由操作系统线程调度程序来安排线程执行以提供可能的输出,但我们无法控制调度程序。因此,正确设计代码以防止竞争条件的重要性。