java线程优先级范围为1~10(默认5),仅作调度建议,不保证执行顺序;守护线程(setdaemon(true))在所有用户线程结束后强制终止,jvm随即退出,二者均须在start()前设置。

Java 中设置线程优先级和守护线程是两个独立但常用的操作,它们分别影响线程的调度行为和 JVM 的生命周期管理。
一、设置线程优先级
Java 线程优先级范围是 1~10,其中:
- Thread.MIN_PRIORITY = 1(最低)
- Thread.NORM_PRIORITY = 5(默认,主线程启动时即为此值)
- Thread.MAX_PRIORITY = 10(最高)
设置方式很简单,调用 setPriority(int) 方法即可:
Thread t = new Thread(() -> {
System.out.println("执行中...");
});
t.setPriority(Thread.MAX_PRIORITY); // 设为最高优先级
t.start();
注意几点:
- 必须在线程启动前设置(start() 之前),否则无效或抛出
IllegalArgumentException - 优先级具有继承性:子线程默认继承创建它的父线程的优先级
- 优先级只是对操作系统的建议值,不保证高优先级线程一定先执行——底层 OS 可能只支持 3~5 级优先级,多个 Java 优先级可能映射到同一 OS 级别
- 实际开发中,除非有明确调度需求(如实时任务),否则一般不主动调整,保持默认 5 即可
二、设置守护线程
守护线程(Daemon Thread)是为其他线程服务的后台线程,典型例子是 JVM 的垃圾回收线程(GC)。它的核心特点是:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 当 JVM 中所有非守护线程(用户线程)都结束时,JVM 自动退出,不会等待守护线程执行完毕
- 守护线程中新建的线程也默认是守护线程
设置方法是调用 setDaemon(true):
Thread daemon = new Thread(() -> {
while (true) {
System.out.println("守护线程运行中...");
try { Thread.sleep(1000); } catch (InterruptedException e) { break; }
}
});
daemon.setDaemon(true); // 必须在 start() 之前调用!
daemon.start();
关键约束:
-
必须在 start() 之前设置,否则抛出
IllegalThreadStateException - 不能对已启动的线程设置守护状态
- 守护线程适合做日志轮转、监控上报、心跳维持等“辅助性”任务;不适合执行关键业务逻辑或需要确保完成的操作(如写文件、提交事务),因为 JVM 可能在它中途退出
三、常见组合使用示例
public class PriorityAndDaemonDemo {
public static void main(String[] args) {
// 启动一个高优先级守护线程(如监控)
Thread monitor = new Thread(() -> {
for (int i = 0; i <p>输出通常为:</p><pre class="brush:java;toolbar:false;">监控中...0
监控中...1
监控中...2
main 结束 → JVM 即将退出(后续的监控打印大概率不会出现,因 JVM 已退出)
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










