我知道线程可以具有从 MIN_PRIORITY(1) 到 MAX_PRIORITY(10) 的优先级。但是,如果我有超过 10 个线程要执行,我将如何为它们分配优先级?优先级可以超过 10 吗?
3 回答
但是,如果我有超过 10 个线程要执行,我将如何为 [每个] 分配 [不同的] 优先级?
你不能。
但这应该没关系。无论如何,线程优先级可能只会给您一个粗略的优先级。当然,javadocs 并没有对线程优先级如何(甚至是否)影响线程调度给出任何强有力的保证。
现代 JVM 上线程调度和线程优先级的实际实现是由操作系统的线程调度程序完成的。JavaThread
优先级实际上只不过是对操作系统的“提示”。
最重要的是,依赖线程优先级来获得正确行为的 Java 应用程序可能不可靠,并且如果在与您最初开发/调试的平台不同的平台上运行,则其行为可能会有所不同/不正确。你永远不应该依赖于正确行为的优先级。使用提供的同步原语确保事情以所需的顺序发生。
如果您需要线程优先级的精确行为,您将需要使用在“实时操作系统”之上运行的“实时 Java”JVM。
javadoc 陈述了以下关于setPriority(int)
抛出:
IllegalArgumentException - 如果优先级不在 MIN_PRIORITY 到 MAX_PRIORITY 范围内。
根据实现,您需要指定适当的值。您将无法使用 进行更精细的优先级设置Thread
。
不,您不能分配高于 10 的优先级,因为您的最大优先级为 10,最小优先级为 1 ..即使您分配的优先级高于 10,它也可以被视为默认优先级并且程序开始根据该优先级工作。