线程相关属性
线程ID
每个线程都有唯一的ID,线程ID是没有setter方法的,也就是不能修改的,这是因为ID是给JVM使用的
- 线程的ID是一个从1开始自增的序列,Main函数就是第一个线程
- JVM在启动时除啦主线程还会自动启动很多其他辅助线程,由于线程的随机性即时自己创建的一个线程ID也可能不是2
public static void main(String[] args) {
System.out.println("主线程ID" + Thread.currentThread().getId());
System.out.println("自定义线程ID" + new Thread().getId());
}
线程名
- 对于没有指定名字的非主线程会有一个以
Thread-
开头,从0开始的自增序列结尾的默认名字(主线程名是main) - 在源码中该自增序列使用了同步锁,所以默认名不会重名,虽然可以认为设置同名线程
- 对于Java程序层的线程名是可以在线程启动后进行修改的,对于本地方法层的线程名是只能在构造函数中设置一次的,通过setter方法修改线程名是修改的Java程序层的线程名
public static void main(String[] args) {
Thread t = new Thread("t");
t.start();
System.out.println(t.getName()); //初始线程名
t.setName("tt");
System.out.println(t.getName()); //修改后的线程名
}
守护线程
通常用于服务用户线程,守护线程有以下几个特性:
- 线程类型默认继承父线程,也就是说由守护线程创建出的默认是守护线程,由用户线程创建出的线程默认是用户线程
- 通常守护线程由JVM自动启动,main方法在运行时JVM还会自动启动很多守护线程
- 所有非守护线程结束,守护线程自动结束
守护线程与普通线程整体上没有区别,只不过守护线程不会影响JVM的退出,一般也无需将用户线程手动设置为守护线程,因为守护线程的停止是JVM停止就突然停止,类似与stop()
方法,无法完成一个基本单位的操作,会造成脏数据
线程优先级
Java中线程优先级分为10级别
- 默认为5,最大为10,最小为1
- 线程的优先级也会继承浮现出
不要依赖优先级,这是因为JVM会将优先级映射到操作系统上,对于不同的操作系统优先级级别并不相同,并且优先级可以被操作系统所修改(比如windows中优先级推进器功能会将非常想要执行的线程优先级提高),所以优先级并不可靠
Comments NOTHING