属性名称

用途

注意事项

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(); // 获取优先级