线程的分类(用户线程和守护线程)

        在线程中,我们把所有的线程分为两类,一类是守护线程一类是用户线程。

一、守护线程(后台线程)
守护线程的作用:守护线程是为用户线程服务的线程,当所有的用户线程执行结束之后,守护线程也会随之结束。

典型的守护线程:JVM中有一个垃圾回收器就是一个典型的守护线程,程序运行的时候他也在运行,当用户线程全部执行完毕之后,程序结束,守护线程也会直接结束。

二、用户线程
        main默认为用户线程

三、返回线程的类型
        我们想要知道某个线程的类型的时候可以用 线程.isDaemon() 来获得,若返回 true 表示该线程是守护线程,若返回 false 表示该线程使用户线程。

四、修改线程的类型
        我们想要指定一个线程的类型可以通过 线程.setDaemon(true/false) 来指定线程的类型,传入的参数为true表示规定为守护线程,若传入的参数为false则表示规定该线程为用户线程。
线程的类型不能在线程的运行期间进行修改,也就是不能在 线程.start() 之后使用,否则JVM会报错

五、线程类型的相关结论
1、主线程默认是用户线程
2、在用户线程中创建的线程默认为用户线程
3、在守护线程中创建的线程默认为守护线程
4、默认的线程类型我们也可以手动进行修改

六、用户线程与守护线程的不同
        用户线程在Java程序中非常重要,JVM一定会等到所有的用户线程执行完之后才会自然结束,而守护线程就不一样了,守护线程的存在是为了给用户线程服务的,所以当所有的用户线程都执行完毕之后,不管守护线程是否还在执行,JVM都会推出执行。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java 中的线程分为守护线程用户线程两种类型,二者的区别在于它们对程序终止的影响不同。当所有的用户线程结束时,程序会停止运行,而守护线程则会随之自动关闭。 下面是一个 Java 守护线程用户线程的示例: ```java public class DaemonThreadExample { public static void main(String[] args) { Thread user = new Thread(() -> { for (int i = 0; i < 5; i++) { System.out.println("User thread is running " + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); user.start(); Thread daemon = new Thread(() -> { while (true) { System.out.println("Daemon thread is running"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); daemon.setDaemon(true); daemon.start(); System.out.println("Main thread ends"); } } ``` 在这个示例中,我们创建了一个名为 `user` 的线程对象,并在它的执行体中使用 `for` 循环打印一条信息并暂停一秒钟。然后我们创建了一个名为 `daemon` 的线程对象,并将其设置为守护线程。在它的执行体中,我们使用 `while` 循环打印一条信息并暂停一秒钟。最后我们启动这两个线程,并打印一条信息。 运行这个示例,我们可以看到,当用户线程执行完毕后,程序终止并输出 `Main thread ends`,而守护线程则会随之自动关闭。 总的来说,守护线程适用于支持其他线程的运行,但又不需要独立运行的场景;而用户线程则是程序的主要执行体,它们在程序运行期间承担着各种任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值