如果您运行多个具有相同优先级的线程,为什么不需要在任何线程中调用yield或sleep方法?我一定是误解了线程是如何工作的。我假设如果两个线程具有相同的优先级,则一个线程将在另一个线程系统上启动之前完成。也就是说,除非你调用其中一个控制函数,即。)yield()sleep()join()... ect
任何了解此主题的人,我将非常感谢您对我的任何澄清。
StackOverFlow不允许我在你的回答中添加评论:
另外根据我的书:“JVM总是选择具有最高优先级的当前可运行线程。优先级较低的线程只有在没有运行高优先级线程时才能运行。”
答案 0 :(得分:5)
为什么不需要在任何线程中调用yield或sleep方法?
预先安排完成调度。您无需调用yield或sleep或等待或调用阻塞操作以使OS暂停您的线程。
我假设如果两个线程具有相同的优先级,则一个线程将在另一个线程系统上启动之前完成。
即使一个线程是最高优先级而另一个是最低优先级,也不意味着一个线程会先于另一个线程完成。
除非你调用其中一个控制函数,即。)yield()sleep()join()
调用这些方法可以放弃CPU,但这并不意味着操作系统不会怀疑某个线程,因为它们没有被调用。注意:它们没有。