Java多线程优先级

时间:2014-12-19 18:11:55

标签: java

如果您运行多个具有相同优先级的线程,为什么不需要在任何线程中调用yield或sleep方法?我一定是误解了线程是如何工作的。我假设如果两个线程具有相同的优先级,则一个线程将在另一个线程系统上启动之前完成。也就是说,除非你调用其中一个控制函数,即。)yield()sleep()join()... ect

任何了解此主题的人,我将非常感谢您对我的任何澄清。

StackOverFlow不允许我在你的回答中添加评论:

另外根据我的书:“JVM总是选择具有最高优先级的当前可运行线程。优先级较低的线程只有在没有运行高优先级线程时才能运行。”

1 个答案:

答案 0 :(得分:5)

  

为什么不需要在任何线程中调用yield或sleep方法?

预先安排完成调度。您无需调用yield或sleep或等待或调用阻塞操作以使OS暂停您的线程。

  

我假设如果两个线程具有相同的优先级,则一个线程将在另一个线程系统上启动之前完成。

即使一个线程是最高优先级而另一个是最低优先级,也不意味着一个线程会先于另一个线程完成。

  

除非你调用其中一个控制函数,即。)yield()sleep()join()

调用这些方法可以放弃CPU,但这并不意味着操作系统不会怀疑某个线程,因为它们没有被调用。注意:它们没有。