各属性纵览
线程ID
每个线程都有一个ID,ID逐渐往上增加
main函数是第一个线程
/**
* 描述: ID从1开始,JVM运行起来后,我们自己创建的线程的ID早已不是2.
*/
public class Id {
public static void main(String[] args) {
Thread thread = new Thread();
System.out.println("主线程的ID"+Thread.currentThread().getId());
System.out.println("子线程的ID"+thread.getId());
}
}
守护线程
作用: 给用户线程提供服务
线程分为用户线程和守护线程
。用户线程没有运行完,JVM 不会停止工作 相当于程序运行了一半,肯定不能停止
如果都是守护线程,如果都是守护线程,就会和JVM一起结束。因为他守护的对象都没有了,守护自身自然也没有价值了,就可以停止了
。代码执行完毕了,只是我们的线程执行完毕了,但是后边还有很多守护线程在执行,但是这些执行并不影响JVM的关闭。当JVM发现所有我们创建的用户线程都结束了,他就会和守护线程一起结束
。守护线程的作用就是给其他线程提供便利服务。比如垃圾处理器
。守护线程的三个特性:
1 线程类型默认继承父线程
2被谁启动
有JVM自动启动,
3不影响JVM退出:只看有没有用户线程,不看守护线程
。守护线程和普通线程的区别
整体无区别
唯一的区别是否影响JVM的退出
还有作用不同“:用户线程是执行我门逻辑的,守护线程是辅助我们的
。我们是否需要给线程设置为守护线程?
不应该
吧我们用户线程改成守护线程是不安全的,当你访问一个文件的时候,JVM以为只剩守护线程了,就把JVM关闭了,有可能造成数据的不一致