多线程中守护线程的使用

article/2025/10/3 7:02:34

java中线程分为非守护线程(用户线程)和守护线程(后台线程)

setDaemon(boolean on)

java线程中对于守护线程的使用主要是依靠setDaemon(boolean on)方法

方法作用: 将此线程设置为守护线程

守护线程使用上与普通线程没有区别, 但是在结束上有一点不同, 当一个进程中所有的普通线程都结束时, 进程就会结束, 此时所有正在运行的守护线程都会被强制杀掉(但是因为java虚拟机停止需要一定时间, 可能就不会出现立马将守护线程杀掉)

注意事项:

1. 设置守护线程的时候, 需要先设置守护现场, 再启动线程.否则会报错, 并且还是以普通线程来执行.

2. 虚拟机必须确保用户线程执行完毕

  • 比如说我们的main主线程就是用户线程,当我们的 main() 执行完毕程序就结束了

3. 虚拟机不用等待守护线程执行完毕

  • 比如说 gc() 垃圾回收线程就是守护线程,虚拟机不需要等待他执行完毕,我们不需要管他甚至都看不见他,虚拟机只要等待正常的用户线程执行结束了就会停止

4. 守护线程的作用如:后台记录操作日志、监控内存、垃圾回收等等......

二、代码演示

package com.softeem.wolf.thread;import java.util.Calendar;
import java.util.GregorianCalendar;/*** Created by 苍狼* Time on 2022-09-08*/
public class ThreadTest {public static void main(String[] args){Thread thread01 = new Thread("thread01"){@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println(Thread.currentThread().getName()+"线程目前的执行时间是:"+new GregorianCalendar().get(Calendar.SECOND));if (i==10){try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("thread01是--->"+i);}}};Thread thread02 = new Thread("thread02"){@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println(Thread.currentThread().getName()+"线程目前的执行时间是:"+new GregorianCalendar().get(Calendar.SECOND));if (i==5){try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("thread02--->是"+i);}}};thread01.setDaemon(true);thread01.start();thread02.start();System.out.println("主线程执行完毕....");}
}

运行结果

分析: 因为thread01线程被设置为守护线程, 所以当thread02线程执行完了之后, thread01按道理来说应该结束运行, 但是因为java虚拟机结束还是需要一段时间, 所以thread01线程又执行了一会就终止运行了(thread01线程并没有完全执行完), 程序就执行结束了, 


http://chatgpt.dhexx.cn/article/cLNnoZAl.shtml

相关文章

python守护线程

启用守护线程 守护线程&#xff0c;又称后台线程&#xff0c;它是在后台运行的&#xff0c;如果所有前台线程都死亡&#xff0c;那么后台线程就会自动死亡。 import threadingdef run(n):for i in range(n):print(threading.current_thread().name " " str(i)) …

多线程-守护线程

守护线程&#xff08;daemon&#xff09;&#xff1a; 线程分为用户线程&#xff08;如main线程&#xff09;和守护线程&#xff1b; 虚拟机必须确保用户线程执行完毕&#xff0c;而不会等待守护线程执行完毕&#xff1b; 守护线程有&#xff1a;记录操作日志的线程、监控内存的…

守护线程是什么?守护线程和非守护线程的区别是?守护线程的作用是?

守护线程是区别于用户线程&#xff0c;用户线程即我们手动创建的线程&#xff0c;而守护线程是程序运行的时候在后台提供一种通用服务的线程。垃圾回收线程就是典型的守护线程。 守护线程和非守护线程的区别是 public static void main(String[] args) throws InterruptedExce…

JAVA多线程——守护线程

在Java中有两类线程&#xff1a;User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的保姆&#xff1a; 只要当前JVM实例中尚存在任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#…

java守护线程 作用_Java中守护线程的总结

在Java中有两类线程&#xff1a;User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的保姆&#xff1a; 只要当前JVM实例中尚存在任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#xf…

【线程】什么是守护线程?

Java提供了两种线程&#xff1a;守护线程和用户线程 守护线程&#xff0c;是指在程序运行时 在后台提供一种通用服务的线程&#xff0c;这种线程并不属于程序中不可或缺的部分。通俗点讲&#xff0c;任何一个守护线程都是整个JVM中所有非守护线程的"保姆"。 用户线…

JAVA多线程基础篇--守护线程(Daemon Thread)

1.概述 JAVA中的线程主要分为两类&#xff1a;用户线程&#xff08;User Thread&#xff09;和守护线程(Daemon Thread)。JAVA语言中无论是线程还是线程池&#xff0c;默认都是用户线程&#xff0c;因此用户线程也被称为普通线程。守护线程也被称之为后台线程、服务线程或精灵…

面试官: 谈谈什么是守护线程以及作用 ?

文章首发自微信公众号: 小哈学Java 个人网站: https://www.exception.site/java-concurrency/java-concurrency-daemon-thread 目录 一、什么是守护线程 二、守护线程的作用及应用场景 三、总结 一、什么是守护线程 守护线程相对于正常线程来说&#xff0c;是比较特殊的一…

入门oracleDBA面试题

1.默认情况下管理员创建了一个用户&#xff0c;就会在 /home 下创建一个用户的主目录 2.当用mount进行设备或文件挂载时&#xff0c;需要用的设备名称位于 /dev 位置。 3.列出目录所有目录里的所有文件ls -l 4.Su 可以讲普通用户转换为超级用户&#xff0c;但是需要密码 5.…

oracle面试题答案,Oracle面试题笔试题及参考答案

一套Oracle面试题笔试题及参考答案 Oracle, 笔试, 面试 完成下列操作&#xff0c;写出相应的SQL语句 1.创建表空间neuspace&#xff0c;数据文件命名为neudata.dbf&#xff0c;存放在d:\data 目录下&#xff0c;文件大小为200MB&#xff0c;设为自动增长&#xff0c;增量5MB&am…

一个oracle面试题

某天&#xff0c;群里突然冒出一个道友询问oracle的面试题&#xff0c;特此记录一下 一系列过程&#xff1a; 第一步建表&#xff1a; DROP TABLE serv; DROP TABLE terminal; CREATE TABLE serv(serv_id NUMBER(10),prod_id NUMBER(10),user_type VARCHAR2(30),terminal_na…

oracle试题和答案,Oracle面试题及答案

Oracle面试题及答案模块和题目 l基本SQL查询 l运算符与函数 l子查询 l连接查询 建表语句emp.sql PartI(第一天) 01.查询员工表所有数据,并说明使用*的缺点 答&#xff1a; select*fromemp; 使用*的缺点有 a)查询出了不必要的列 b)效率上不如直接指定列名 02.查询职位(JOB)为PRE…

Oracle面试题整理

目录 Oracle面试题整理 1.MySQL和Oracle的区别&#xff1a; 2.Oracle中function和procedure的区别&#xff1f; 3. 比较truncate和delete命令 &#xff1f; 4.oralce中 rowid, rownum的定义 5. 事务的特性&#xff08;ACID&#xff09;是指什么 6. 列举几种表连接方式…

Oracle面试题及答案整理,速速收藏

点击上方SQL数据库开发&#xff0c;关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 好久没有给大家发面试题了&#xff0c;最近收集了一套Oracle的面试题&#xff0c;特地整理出来分享给大家&#xff0c;希望对你有帮助。 1、表&#xff1a;table1(…

Oracle数据库面试题

1、什么是数据库&#xff1f; 使用数据结构存储数据的仓库。 2、什么是关系型数据库&#xff1f; 使用关系模型存储数据的数据库。 关系模型指表与表之间的关系&#xff0c;包含一对一、一对多、多读多。 3、什么是非关系型数据库&#xff1f; 使用非关系模型保存数据的数据…

Oracle 面试题汇总

1&#xff0c;delete 与Truncate区别&#xff1f; 1&#xff09;Truncate 是DDL 语句&#xff0c;DELETE 是DML语句。 2&#xff09; Truncate 的速度远快于DELETE&#xff1b; 原因是&#xff1a; 当执行DELETE操作时所有表数据先被COPY到回滚表空间&#xff0c;数据量不同…

取消WIN10上shift键切换中英文输入法的设置

关闭全角半角切片: 设置 -> 时间和语言 -> 语言 -> 选项 -> 微软拼音输入法选项 -> 常规 -> 使用半角输入模式(开) Win10自带的输入法本人感觉还不错&#xff0c;但是在常用shift键实现其他相应功能的时候&#xff0c;&#xff08;如我经常用shift切换大小写…

Visual Studio 中英文切换

Visual Studio 中英文切换 今天发现Visual Studio用中文太没意思&#xff0c;于是研究了下如何改为英文版&#xff0c;这里以Visual Studio2017为例&#xff0c;如下&#xff1a; Visual Studio默认是不支持英文的&#xff0c;需要先安装下语言包&#xff1a; 找到Visual Stud…

pycharm中英文切换

1、关闭当前project 2、按照下图&#xff0c;如果有勾&#xff0c;就把勾去除&#xff0c;重新打开project&#xff0c;就是英文版了&#xff0c;反之是中文界面

springboot-页面中英文切换(国际化原理)

在springboot中有MessageSourceAutoConfiguration这个自动配置类&#xff0c;通过搜索找到这个类 首先可以看到这个类在配置文件中通过spring.messages.xxx来对对应properties中的属性进行配置&#xff0c;我们点进去properties这个对象里面&#xff0c;也就是类MessageSource…