java multithreading,子线程运行时间的差异

时间:2015-05-01 13:05:29

标签: java multithreading cmd

我在10 timeswindows cmd line上运行了代码every time我得到same output

enter image description here

我在same code上运行ideone ,10 times,每次我same output

enter image description here

我的问题是:

  • 根据我的代码,子线程必须为500ms1000ms的主线程休眠所以我认为在主线程运行once之后,子线程运行{{1}但是在twice中,孩子一次cmd output3 times其他时间。为什么?

  • 1 timeideone的输出有所不同?

这是我的代码

cmd

2 个答案:

答案 0 :(得分:2)

出现这种差异有几个原因:

  • 它的系统调度程序为线程提供CPU时间,并且可以根据自己的喜好随意组织它。你无法强制它以精确的精度为你的线程提供CPU。
  • 在线程之间进行同步时,您不应该依赖sleep。这基本上会使线程停用一段时间,但无法保证它会立即唤醒。如果你想要特定的顺序,你应该使用同步原语,如互斥和条件变量。
  • 您的计算机和ideone服务器上很可能有不同的硬件。此外,意识形态最有可能是其他东西,所以波动更大。

答案 1 :(得分:0)

您似乎假设您的程序将在计时器用完后立即恢复。除非您使用的是控制所有流程和优先级的实时系统,否则在任何计算机上都不一定如此。 但是,在具有中等负载的机器上,行为可能就像ideone所表现出的行为一样。不可否认,奇怪的是你的Windows机器总是生成相同的输出,但它并没有改变这样一个事实,即你唯一的保证就是你的线程将在你指定的时间内至少休眠,而不是AT MOST。如果需要,可以在输出中包含时间戳以验证这一点。

相关问题