介绍
主要介绍Java线程属性
Java线程属性有:
- 线程ID:每个线程都有自己的ID,用于标识不同的线程
- 线程名称:让用户或程序员在开发、调试或运行过程中,更容易区分每个不同的线程,定位问题等。
- 是否是守护线程:true代表该线程是[守护线程],false代表线程是非守护线程,也就是[用户线程]。
- 优先级:优先级这个属性的目的是告诉线程调度器,用户希望哪些线程相对多运行、哪些少运行。
线程ID
- 主线程main的线程id是1
- 在启动我们定义的线程之前,会有其他的辅助线程已经启动,所以用户定义的线程执行时的线程ID早已不是2
- Thread类的线程ID变量时synchronized修饰的静态变量,每新增一个线程,静态变量就会+1,保证线程的ID不会重复。
守护线程
- 作用:给用户线程提供服务
- 当用户线程全部结束后,守护线程也会随之结束
- 线程类型默认继承自父线程:
- 守护线程创建出来的自然时守护线程
- 用户线程如果想要创建守护线程,需要手动修改
- 被谁启动
- 通常时JVM自动启动守护线程
- JVM启动的时候有一个线程不是守护线程,那就是main线程
- 不影响JVM退出
- JVM退出时,只会查看是否还有用户线程,不会顾及是否还有守护线程的存在
- 线程类型默认继承自父线程:
守护线程与用户线程的区别
- 整体无区别
- 唯一区别在于是否影响JVM的退出
- 用户线程执行我们的逻辑
- 守护线程服务于用户线程
我们是否需要给线程设置为守护线程
不应该,很危险,万一在某个时刻,JVM中只有我们定义的这一个线程了,JVM会认为没有用户线程了,就会结束守护线程,就导致了错误。
线程优先级
- 共有10个级别,线程默认优先级是5
- 通过setPriority设置优先级,getPriority获取优先级
- 默认3个优先级常量:MIN_PRIORITY=1,MAX_PRIORITY=10,NROM_PRIORITY=5;
- 程序设计不应该依赖于优先级
- 不同操作系统对优先级的操作不一致
- java会把线程优先级映射到操作系统的优先级,所以在不同的操作系统,同样设置的java优先级,映射后的结果可能不一致
- 优先级会被操作系统修改。即使始终运行在一个操作系统,操作系统会根据线程的运行情况,实时调整优先级。
- 不同操作系统对优先级的操作不一致
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/15/concurrent/2020-03-15-threadAttribute/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!