Java给每个线程安排优先级以决定与其他线程比较时该如何对待该线程。线程优先级是详细说明线程间优先关系的整数。
作为绝对值,优先级是毫无意义的;当只有一个线程时,优先级高的线程并不比优先权低的线程运行的快。
相反,线程的优先级是用来决定何时从一个运行的线程切换到另一个。这叫“上下文转换”(context switch)。决定上下文转换发生的规则很简单:
(1)线程可以自动放弃控制。在I/O未决定的情况下,睡眠或阻塞由明确的让步来完成。
(2)在这种假定下,所有其他的线程被检测,准备运行的最高优先级线程被授予CPU。
(3)线程可以被高优先级的线程抢占。在这种情况下,低优先级线程不主动放弃,处理器只是被先占——无论它正在干什么——处理器被高优先级的线程占据。基本上,一旦高优先级线程要运行,它就执行。这叫做有优先权的多任务处理。
当两个相同优先级的线程竞争CPU周期时,情形有一点复杂。对于Windows98这样的操作系统,等优先级的线程是在循环模式下自动划分时间的。
对于其他操作系统,例如Solaris 2.x,等优先级线程相对于它们的对等体自动放弃。如果不这样,其他的线程就不会运行。
不同的操作系统下等优先级线程的上下文转换可能会产生错误。