什么会影响Windows 7/8中Java中的线程调度

ale*_*exb -1 java windows multithreading scheduling

我正在测试一个多线程的Java程序.为了调试,我让线程打印出语句.打印输出的顺序如下:

  • 线程消息1
  • 线程消息2
  • 线程消息1
  • 线程消息2

问题是在某台机器上它变为:

  • 线程消息1
  • 线程消息1
  • 线程消息2
  • 线程消息2

该机器与我测试的所有其他机器具有相同的Java版本.起初我认为这是一个Windows 8问题,因为以前的问题有Windows 7,但我在另一台Windows 8机器上尝试过,它运行正常.所以我的问题是其他变量可以影响Java中的线程调度?仅供参考机器的错误序列发生的是Acer Aspire E1-521-0694 AMD双核E2-1800与Windows 8.

Aur*_*and 7

机器发生错误的顺序

处理非同步多线程时,没有"不正确"的序列.事情将按照它们发生的顺序发生.如果您需要按特定顺序强制执行某些操作,则需要添加snychronization(请参阅:http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html for Oracle教程).

对于所有意图和目的,线程调度是完全不可预测的,相信否则会让你陷入麻烦的世界.