属性名称 | 用途 | 注意事项 |
---|---|---|
id (线程id) | 标识不同的线程 | 被后续创建的线程使用,唯一性,不能被修改 |
name (线程名称) | 定位问题 | 开发和排查问题的时候用得到,定义名字要清晰有意义 |
isDaemon (是否是守护线程) | 守护线程、用户线程 | 1: 继承父线程,2: setDaemon() |
priority (线程优先级) | 相对多运行 | 默认和父线程的优先级相等,共有10个等级 |
1.线程id
- 线程id主要用来表示不同的线程的,这个类似数据库的主键id。id从1开始自增。
生成线程id源码
2.线程名称
- 线程名称这个属性一般在开发或者调试程序的时候用的比较多,这个线程名称可以我们自定义也可以使用默认的
生成线程名称源码
自定义名称的源码
3.守护线程
- 作用: 给用户线程提供服务的 (用户线程就是实际上执行业务逻辑的线程),gc垃圾回收就是守护线程。用户线程全都执行完成以后,jvm就回停止,它不会关心守护线程有没有执行完成,因为等待守护线程完成没有意义,用户线程都执行完成了你这个守护线程还是守护谁的?所以jvm不会管守护线程是否完成而直接就停止。
举个例子: 和朋友去吃饭, 由于在吃饭的过程中和朋友聊得比较嗨,都已经超过了饭店的关门时间了,但是老板还不能关门因为还有人在吃饭,吃饭的人就是用户进程, 用户进程不结束,jvm不能停止。 - public final void setDaemon(boolean on);// 设置守护线程
- public final boolean isDaemon(); // 判断是否为守护线程
4.线程优先级
- 线程的优先级就是在多线程的环境中设置线程的执行顺序,但是这个顺序不是说优先级高的线程就会立刻优先执行,只是让线程有很大的几率优先执行而已,在java中线程的优先级有十个,子线程默认会继承父线程。
- 程序不能完全依赖线程的优先级,不同操作系统之间的优先级是不同的。
- public final void setPriority(int newPriority); // 设置优先级的方法
- public final int getPriority(); // 获取优先级