有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java多线程优先级

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

任何有这方面知识的人,如果您能给我澄清,我将不胜感激

StackOverFlow不允许我对你的回答发表评论:

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


共 (1) 个答案

  1. # 1 楼答案

    why do you not need to call the yield or sleep method in any of the threads?

    计划是先发制人的。您不需要调用yield或sleep,也不需要等待或调用阻塞操作,操作系统就可以挂起您的线程

    I was under the assumption that if two threads are of the same priority, one will finish before the other is started on a single core system.

    即使一个线程的优先级最高,一个线程的优先级最低,也不意味着一个线程会比另一个线程先完成

    unless you call one of the control functions ie.) yield() sleep() join()

    调用这些方法可能会放弃CPU,但这并不意味着操作系统不会因为没有调用这些方法而怀疑线程。,注:他们不必这么做