我正在尝试理解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
答案 0 :(得分:1)
那么,由于主线程和Inter线程是同时执行的,为什么这不可能是一个可能的跟踪?
是的,它可以。如果你运行你的程序一千次,很可能你将至少输出一次。
由操作系统线程调度程序来安排线程执行以提供可能的输出,但我们无法控制调度程序。因此,正确设计代码以防止竞争条件的重要性。