为什么main是每次执行代码时在下面的代码中执行的第一个线程

时间:2016-02-07 13:32:28

标签: java multithreading

每次我执行下面的代码时,主线程每次都会被执行,即使我已经编写代码来打印代码下面的主线程名称来打印其他线程的名称(执行顺序)。 / p>

这是代码。

{{1}}

}

1 个答案:

答案 0 :(得分:2)

不同Java线程的执行顺序未指定且不确定。当我第一次运行你的代码时,前三行是

thread1
thread2
main

当我第二次跑它时,线条是

main
thread2
thread1

这种非确定性和缺乏规范是故意的。它为Java虚拟机的实现者提供了自由,可以使用操作系统进行线程切换,而不会将其限制在特定的操作系统中。

此外,在大多数操作系统上,线程的顺序是未指定的且不确定的。知道操作系统内部可以揭示特定的行为和决定论,然而,这是逆向工程知识,操作系统的未来版本可能随时改变行为(除非它是行为合同的官方部分"操作系统,对大多数操作系统来说都不是。

如果需要以指定的确定方式执行线程,则需要同步它们。一种方法是在java.lang.Object.wait()块中使用java.lang.Object.notify()synchronized