java 一个线程是否有可能在main中先于它的另一行之前执行?

nwsw7zdq  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(112)

是否可以打印出以下代码:
--〉控制台输出:

Thread-1 printed
main printed

--〉代码:

public static void main (String [] args)
{
System.out.println("main printed");
new Thread( () -> System.out.println("Thread-1 printed")).start();
}

在我看来,这段代码应该能够打印出来

Thread-1 printed
main printed

main printed
Thread-1 printed

因为我认为另一个线程有可能因为某种原因比主线程快,这个假设是对还是错?
我多次尝试了这段代码,但只得到了main在线程1之前打印的结果。但我仍然认为理论上这是可能的,因为没有“join()”或其他在主线程上调用的东西。

km0tfn4u

km0tfn4u1#

此代码将始终打印

main printed
Thread-1 printed

不管线程1执行得多快,因为线程1只在System.out.println("main printed");行之后创建/启动。您的main方法仍然与new Thread( () -> ...)创建线程之前调用的System.out.println("main printed")指令同步。该顺序不会改变。
理论上,如果System.out.println("main printed")也被 Package 在一个线程中并与另一个线程并行运行,假设第二次打印由于某种原因比第一次打印花费更长的时间,那么顺序可能会改变。

相关问题