Java线程优先级

Part 1:优先级是什么?

1.1 基础概念

  • 每个线程都有优先级(1~10的数字)
  • 优先级高的线程可能获得更多CPU时间(注意是可能!)
  • 默认优先级是5(中庸之道)

1.2 举个栗子🌰

想象有三个学生(线程)举手想回答问题:

  • 小明(优先级10):疯狂挥手+站起来
  • 小红(优先级5):正常举手
  • 小刚(优先级1):懒洋洋地抬下手

老师(JVM)
→ 通常会先点小明,但不一定每次都是(取决于老师心情/具体JVM实现)


Part 2:怎么设置优先级?

2.1 三个预设常量

Thread.MAX_PRIORITY    // =10
Thread.NORM_PRIORITY   // =5(默认值)
Thread.MIN_PRIORITY    // =1

2.2 设置方法

Thread 小明 = new Thread(() -> {
    System.out.println("我是最高优先级!");
});
小明.setPriority(Thread.MAX_PRIORITY); // 设为10
小明.start();

 

2.3 查看优先级

System.out.println("小明优先级:" + 小明.getPriority());

Part 3:实际效果测试

3.1 代码示例

System.out.println("小明优先级:" + 小明.getPriority());

3.2 可能输出

VIP线程 优先级:10
普通线程 优先级:1
VIP线程 优先级:10
VIP线程 优先级:10
普通线程 优先级:1
VIP线程 优先级:10
普通线程 优先级:1
VIP线程 优先级:10
普通线程 优先级:1
普通线程 优先级:1

Part 4:重要注意事项

4.1 优先级不保证顺序

  • 高优先级线程不一定先执行完
  • 低优先级线程也可能抢占CPU(特别是Windows系统)

4.2 操作系统差异

系统对优先级的支持
Windows有7个优先级级别(映射到Java的1-10)
Linux基本忽略优先级(平等主义!)
macOS部分支持

4.3 不要过度依赖

  • 错误用法:用优先级控制业务逻辑顺序
  • 正确做法:用锁、信号量等同步机制

Part 5:什么时候用优先级?

适合场景

  1. 后台日志线程 vs 用户交互线程 → 给用户交互更高优先级
  2. 实时计算任务 vs 普通批处理任务 → 实时任务设高优先级

代码示例(UI优化)

// UI渲染线程(高优先级)
Thread uiThread = new Thread(() -> {
    renderUI();
});
uiThread.setPriority(8);

// 日志记录线程(低优先级)
Thread logThread = new Thread(() -> {
    writeLogs();
});
logThread.setPriority(3);

 


曼波小课堂:优先级原理

底层机制

  • JVM通过native setPriority0()方法调用操作系统API
  • Windows:调用SetThreadPriority
  • Linux:调用setpriority(PRIO_PROCESS)
  • 实际效果取决于OS的线程调度策略

优先级映射表(Windows)

Java优先级Windows优先级
1THREAD_PRIORITY_LOWEST
5THREAD_PRIORITY_NORMAL
10THREAD_PRIORITY_HIGHEST

Part 6:替代方案推荐

6.1 使用线程池管理

ExecutorService executor = Executors.newFixedThreadPool(3);
executor.execute(高优先级任务);
executor.execute(低优先级任务);

6.2 使用CompletableFuture

CompletableFuture.runAsync(紧急任务)
    .thenRunAsync(普通任务);

(✪▽✪)曼波总结

  • 优先级像「建议」而不是命令
  • 不同操作系统效果差异大
  • 重要业务逻辑不要依赖优先级
  • 推荐用更可靠的并发工具类

脑图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值