java中的守护线程
2023-09-27 14:25:20 时间
线程分类
守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程,这是它的作用——而其他的线程只有一种,那就是用户线程。所以java里线程分2种:
- 用户线程:比如垃圾回收线程,就是最典型的守护线程
- 守护线程:就是应用程序里的自定义线程
用户线程举例
public class UserTest { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println("hi daemon...."); } } }); daemonThread.start(); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread is over!"); } }
守护线程举例
public class DaemonTest { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while(true) { System.out.println("hi Daemon...."); } } }); daemonThread.setDaemon(true); daemonThread.start(); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread is over!"); } }
结果对比
用户线程中会一直执行下去,守护线程执行一会就结束了。
定义
1、守护线程,专门用于服务其他的线程,如果其他的线程(即用户自定义线程)都执行完毕,连main线程也执行完毕,那么jvm就会退出(即停止运行)——此时,连jvm都停止运行了,守护线程当然也就停止执行了。
2、再换一种说法,如果有用户自定义线程存在的话,jvm就不会退出——此时,守护线程也不能退出,也就是它还要运行,干嘛呢,就是为了执行垃圾回收的任务啊。
守护进程和用户进程同时执行任务的例子
#
public class MyCommon extends Thread { public void run() { for (int i = 0; i < 5; ++i) { System.out.println("线程1第 " + i + " 次执行"); try { Thread.sleep(7); }catch (InterruptedException e) { e.printStackTrace(); } } } }
#
public class MyDaemon extends Thread { public void run() { for (int i = 0; i < 5000; ++i) { System.out.println("后台线程1第 " + i + " 次执行"); try { Thread.sleep(7); }catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Thread thread1 = new MyCommon(); Thread thread2 = new MyDaemon(); thread2.setDaemon(true); thread1.start(); thread2.start(); } }
执行结果
后台线程1第 0 次执行 线程1第 0 次执行 后台线程1第 1 次执行 线程1第 1 次执行 后台线程1第 2 次执行 线程1第 2 次执行 后台线程1第 3 次执行 线程1第 3 次执行 后台线程1第 4 次执行 线程1第 4 次执行 后台线程1第 5 次执行
相关文章
- Java 在 IntelliJ IDEA 中提示 set the language level 9
- Go语言如果按这样改进,能不能火过Java?
- Java追加文件内容的三种方法
- Java 线程并发策略
- Java开发知识之Java面相对象
- Java中的Filter过滤器详解
- Java线程池的那些事
- Java Runnable、Callable、FutureTask
- Java生成二维码工具类
- Java中Optional类的使用
- Java 练习(线程练习)
- java中获取当前执行线程的名称
- 一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
- Java并发编程:4种线程池和缓冲队列BlockingQueue
- Java API HbaseUtil工具类
- 查看JAVA的class二进制文件的方法
- java利用线程池处理集合
- Java线程等待唤醒机制(加深理解)
- Java多线程-线程的同步与锁