Java 线程的优先级

本贴最后更新于 1951 天前,其中的信息可能已经沧海桑田

文章摘抄自《图解多线程设计模型》

Java 的优先级只能在特定的 JAVA 平台运行环境中起作用

Java 规范中几乎没有规定任何通用于所有 Java 平台运行环境的优先级。因此,优先级只在特定的 Java 平台运行环境(Java VM 的实现和版本,以及操作系统)中起作用。

Java 规范中并没有写明优先级的值是否会对线程的运行产生影响,以及如果会产生影响,具体是什么样的影响。虽然其中写着“优先级高的线程会优先执行“、但是因为并没有写明这里的“优先“到底是什么意恩,所以没有太大意义。

在某个 Java 平台运行环境中,高优先级的线程可能会比低优先级的线程得到更长的 CPU 时间但是在其他 Java 平台运行环境中,最高优先级的线程则可能会使用全部 CPU 时间。这时,只要高
优先级的线程没有被阻塞,低优先级的线程就无法执行。此外,还有可能在另外一个 Java 平台运行环境中,不管线程是什么优先级,都不会对线程的执行产生任何影响。

可能会有读者认为“不管怎样,将想要优先执行的线程的优先级设置得高一点总没有坏处吧“。这其实是错的。因为在有些 Java 平台运行环境中,只要线程的优先级稍微高一点,就有可能会一直不停地执行下去这种情况下,如果提高某个线程的优先级,就可能会导致只有该线程被执行,其他线程则全部被停止。也就是说,程序会变为类似单线程执行的状态。

如果无论如何都必须使用优先级,需要先确定 Java 平台运行环境,然后调查该运行环境是如何处理优先级的。但是,这种做法无法确保这段程序在其他运行环境中执行时与在当前运行环境中执行时程序行为是相同的。

表示优先级的静态字段

虽然 Java 定义了这些值,但这些值并不一定直接表示操作系统的优先级。

  • Thread.MAX_PRIORITY 表示最高的优先级
  • Thread.NORM_PRIORITY 表示默认的优先级
  • Thread.MIN_PRIORITY 表示最低的优先级

API

setPriority(Int)
用于设置优先级

getPriority()
用于获取优先级

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • linker

    sleep 一般来说是最简单的实现低优先级的方法。