java多线程之Daemon(守护线程)使用

您所在的位置:网站首页 多线程的用途 java多线程之Daemon(守护线程)使用

java多线程之Daemon(守护线程)使用

2024-07-12 10:15| 来源: 网络整理| 查看: 265

相信学习过java的同学对守护线程这个词都不陌生,下面我就会详细来介绍一下守护线程的使用方式。

下面请大家先来看一下这段简单的多线程代码。

public class DeamonThread { public static void main(String[] args) { Thread t = new Thread() { @Override public void run() { try { System.out.println(Thread.currentThread().getName() + "running"); Thread.sleep(10_000); System.out.println(Thread.currentThread().getName() + "done"); } catch (Exception e) { e.printStackTrace(); } } }; t.start(); System.out.println("main done"); } }

这段代码定义一个线程t,执行main函数的时候,main线程会先退出,而t线程因为定义了休眠10s所以main线程执行完退出的时候它还是在继续执行。直到t执行完成整个application才会完全退出。

下面我们给这段代码加一个属性t.setDaemon(true);

 

public class DeamonThread { public static void main(String[] args) { Thread t = new Thread() { @Override public void run() { try { System.out.println(Thread.currentThread().getName() + "running"); Thread.sleep(10_000); System.out.println(Thread.currentThread().getName() + "done"); } catch (Exception e) { e.printStackTrace(); } } }; t.setDaemon(true); t.start(); System.out.println("main done"); } }

 设置了Daemon这个属性t就会变成一个守护线程,当main执行结束以后t也不会再继续执行。

下面举一个小例子,我们在建立一些网络长连接的时候,通常需要定时性的发送一些心跳包来确保连接的正常。而当这个网络长 连接关闭的时候,我们需要这个发送心跳包的线程也一起关闭。这个时候守护线程就起到了至关重要的作用。请看以下代码

public class DeamonThread { public static void main(String[] args) { // t 线程模拟网络长连接 Thread t = new Thread(() -> { // innerThread 线程模拟发送心跳的线程 Thread innerThread = new Thread(() -> { try { while(true) { System.out.println("发送心跳"); Thread.sleep(1_000); } } catch (Exception e) { e.printStackTrace(); } }); innerThread.setDaemon(true); innerThread.start(); try { Thread.sleep(1_000);// 模拟长连接1秒以后就退出 System.out.println("T Thread done"); } catch (Exception e) { e.printStackTrace(); } }); t.start(); } }

假如innerThread线程不设置Daemon属性则t线程执行完毕以后,innerThread依然会一直执行。

以上就是对守护线程使用的一个小例子,有自己见解的同学欢迎在下面留言讨论

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3