是否可以打印出以下代码:
--〉控制台输出:
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()”或其他在主线程上调用的东西。
1条答案
按热度按时间km0tfn4u1#
此代码将始终打印
不管线程1执行得多快,因为线程1只在
System.out.println("main printed");
行之后创建/启动。您的main方法仍然与new Thread( () -> ...)
创建线程之前调用的System.out.println("main printed")
指令同步。该顺序不会改变。理论上,如果
System.out.println("main printed")
也被 Package 在一个线程中并与另一个线程并行运行,假设第二次打印由于某种原因比第一次打印花费更长的时间,那么顺序可能会改变。