为 Java 的线程设置优先级

2022-09-01 13:53:12

我有一个在几个线程中运行的程序。主线程与其他线程共享一个对象,在主线程中,我调用了:

synchronized(obj){
    do stuff
}

我怀疑主线程已匮乏,无法访问 。如何提高主线程的优先级,或者默认情况下它已经高于其他线程?obj


答案 1

Thread 类中有一个 setPriority() 方法。

检查此 javadoc

将线程优先级设置为最大值:

public static void main(String args[]) {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    // Your main code.
}

答案 2

此处的系列文章指出了在各种平台上管理线程优先级的一些复杂性。

我想知道你的根本问题是否仅仅是因为你的工作线程非常占用CPU,因此很少达到它们会自然“放开”处理器的程度(例如通过做一些IO或睡眠)。如果是这种情况,那么您可以在这些工作线程中包含一些对 yield() 的调用,从而给其他线程更多的机会。