Java线程特性
1. 线程优先级(Thread Priority)
- 定义:Java中每个线程都有一个优先级,范围从1(最低)到10(最高)
- 默认优先级:5 (Thread.NORM_PRIORITY)
- 设置方法:
thread.setPriority(int priority); // 1-10之间
- 注意事项:
- 优先级只是给调度器的建议,不保证严格执行
- 不同操作系统对优先级的处理可能不同
- 高优先级线程更可能先执行,但不是绝对的
2. 守护线程(Daemon Thread)
- 定义:在后台运行的线程,为其他线程提供服务
- 特点:
- JVM在所有非守护线程结束后就会退出,不管守护线程是否完成
- 不能用于执行重要任务,因为可能随时被终止
- 设置方法:
thread.setDaemon(true); // 必须在start()前调用
- 常见守护线程:GC线程
3. 礼让线程(Yield)
- 定义:当前运行线程让出CPU,进入就绪状态
- 方法:
Thread.yield();
- 特点:
- 只是提示调度器可以切换线程,不保证立即生效
- 适用于"我已经完成重要部分,可以暂停"的场景
- 实际开发中较少使用
4. 插入线程(Join)
- 定义:让一个线程等待另一个线程完成
- 方法:
thread.join(); // 等待thread执行完毕
thread.join(1000); // 最多等待1000毫秒
- 特点:
- 调用join()的线程会阻塞,直到目标线程完成
- 常用于主线程等待子线程完成后再继续
- 可以设置超时时间避免无限等待
总结对比
特性 | 作用 | 关键方法 | 注意事项 |
---|---|---|---|
优先级 | 影响线程调度顺序 | setPriority() | 不保证严格执行 |
守护线程 | 后台服务线程 | setDaemon() | JVM退出时不保证完成 |
礼让 | 主动让出CPU | yield() | 只是建议,效果不确定 |
插入 | 等待其他线程完成 | join() | 可能导致阻塞 |
这些特性提供了对线程行为的细粒度控制,但在实际应用中应谨慎使用,特别是优先级和yield(),因为它们的实际效果依赖于JVM实现和操作系统调度。