java高并發------守護線程Daemon Thread

文章目錄

  • 1.概念
  • 2.生命周期與行為
  • 2. 應用場景
  • 3. 示例代碼
  • 4. 注意事項

1.概念

Daemon : 滴門

在Java中,線程分為兩類:用戶線程(User Thread)和守護線程(Daemon Thread)。
守護線程是后臺線程,主要服務于用戶線程,當所有的用戶線程結束時,守護線程也會自動結束,JVM會隨之退出。
守護線程的一個典型例子是垃圾回收線程。守護線程由JVM自己管理,不需要程序員手動結束。

總結:jvm等用戶線程全部執行完,然后拉著守護線程一起死。

2.生命周期與行為

啟動與運行:守護線程的啟動和普通線程一樣,通過調用start()方法進入就緒狀態,等待CPU調度執行。

終止條件:守護線程會在以下任一條件滿足時終止:

  • 所有非守護線程結束執行。
  • 顯式調用Thread.interrupt()或Thread.stop()(已廢棄)方法中斷線程。
  • 程序中主動調用System.exit()結束JVM。

JVM退出:當最后一個非守護線程終止時,即使守護線程仍在執行某任務,JVM也會立即終止,不會等待守護線程完成其任務。

2. 應用場景

沒有特殊應用場景,守護線程可以做的事情用戶線程也可以做,只是比用戶線程少了一步線程間的通信。

守護線程的適用鐵律:
當且僅當任務可接受被隨時終止,且其終止不會導致數據損壞或邏輯錯誤時,使用守護線程。

在java web中沒必要使用:

因為在java web 中,比如用springboot 創建的web項目,springboot和其內嵌web服務器(比如tomcat)默認使用都是用戶線程,他們的生命周期與jvm是強綁定的,也就是說springboot項目中 若中止所有用戶線程,其整個jvm進程就會中止,守護線程又是由jvm管理的,所以springboot項目使用守護線程是沒有必要使用,用線程池更好創建用戶線程能更方便管理。

3. 示例代碼

創建守護線程

public class DaemonTest {public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {while (true){}},"t1");//如果沒有設置守護線程,主線程結束,t1線程不會結束t1.setDaemon(true);t1.start();TimeUnit.SECONDS.sleep(3);log.debug("main 結束");}
}

4. 注意事項

守護線程不能用作訪問持久化資源或者寫入文件,因為其會被jvm強行中止導致數據不一致。

守護線程的適用鐵律:
當且僅當任務可接受被隨時終止,且其終止不會導致數據損壞或邏輯錯誤時,使用守護線程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74667.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker存儲策略深度解析:臨時文件 vs 持久化存儲選型指南

Docker存儲策略深度解析:臨時文件 vs 持久化存儲選型指南 一、存儲類型全景對比二、臨時存儲適用場景與風險2.1 最佳使用案例2.2 風險警示 三、持久化存儲技術選型3.1 Volume核心優勢Volume管理命令: 3.2 Bind Mount適用邊界掛載模式對比: 四…

【Linux網絡#18】:深入理解select多路轉接:傳統I/O復用的基石

📃個人主頁:island1314 🔥個人專欄:Linux—登神長階 目錄 一、前言:🔥 I/O 多路轉接 為什么需要I/O多路轉接? 二、I/O 多路轉接之 select 1. 初識 select2. select 函數原型2.1 關于 fd_set 結…

高級:微服務架構面試題全攻略

一、引言 在現代軟件開發中,微服務架構被廣泛應用于構建復雜、可擴展的應用程序。面試官通過相關問題,考察候選人對微服務架構的理解、拆分原則的掌握、服務治理的能力以及API網關的運用等。本文將深入剖析微服務架構相關的面試題,結合實際開…

使用MQTTX軟件連接阿里云

使用MQTTX軟件連接阿里云 MQTTX軟件阿里云配置MQTTX軟件設置 MQTTX軟件 阿里云配置 ESP8266連接阿里云這篇文章里有詳細的創建過程,這里就不再重復了,需要的可以點擊了解一下。 MQTTX軟件設置 打開軟件之后,首先點擊添加進行創建。 在阿…

【HFP】藍牙Hands-Free Profile(HFP)核心技術解析

藍牙 Hands-Free Profile(HFP)作為車載通信和藍牙耳機的核心協議,定義了設備間語音交互的標準化流程,并持續推動著無線語音交互體驗的革新。自2002年首次納入藍牙核心規范以來,HFP歷經多次版本迭代(最新為v…

輕量化大模型微調工具XTuner指令微調實戰(下篇)

接著上篇文章《輕量化大模型微調工具XTuner指令微調實戰(上篇)》來接著寫教程。 一、模型轉換 模型訓練后會自動保存成 PTH 模型(例如 iter_500.pth),我們需要利用 xtuner convert pth_to_hf 將其轉換為 HuggingFace…

pyTorch框架使用CNN進行手寫數字識別

目錄 1.導包 2.torchvision數據處理的方法 3.下載加載手寫數字的訓練數據集 4.下載加載手寫數字的測試數據集 5. 將訓練數據與測試數據 轉換成dataloader 6.轉成迭代器取數據 7.創建模型 8. 把model拷到GPU上面去 9. 定義損失函數 10. 定義優化器 11. 定義訓練…

強化學習課程:stanford_cs234 學習筆記(3)introduction to RL

文章目錄 前言7 markov 實踐7.1 markov 過程再敘7.2 markov 獎勵過程 MRP(markov reward process)7.3 markov 價值函數與貝爾曼方程7.4 markov 決策過程MDP(markov decision process)的 狀態價值函數7.4.1 狀態價值函數7.4.2 狀態…

操作系統 4.5-文件使用磁盤的實現

通過文件進行磁盤操作入口 // 在fs/read_write.c中 int sys_write(int fd, const char* buf, int count) {struct file *file current->filp[fd];struct m_inode *inode file->inode;if (S_ISREG(inode->i_mode))return file_write(inode, file, buf, count); } 進程…

libreoffice-help-common` 的版本(`24.8.5`)與官方源要求的版本(`24.2.7`)不一致

出現此錯誤的原因主要是軟件包依賴沖突,具體分析如下: ### 主要原因 1. **軟件源版本不匹配(國內和官方服務器版本有差距) 系統中可能啟用了第三方軟件源(如 PPA 或 backports 源),導致 lib…

使用Geotools中的原始方法來操作PostGIS空間數據庫

目錄 前言 一、原生PostGIS連接介紹 1、連接參數說明 2、創建DataStore 二、工程實戰 1、Maven Pom.xml定義 2、空間數據庫表 3、讀取空間表的數據 三、總結 前言 在當今數字化與信息化飛速發展的時代,空間數據的處理與分析已成為眾多領域不可或缺的一環。從…

訊飛語音合成(流式版)語音專業版高質量的分析

一、引言 在現代的 Web 應用開發中,語音合成技術為用戶提供了更加便捷和人性化的交互體驗。訊飛語音合成(流式版)以其高效、穩定的性能,成為了眾多開發者的首選。本文將詳細介紹在 Home.vue 文件中實現訊飛語音合成(流…

走進未來的交互世界:下一代HMI設計趨勢解析

在科技日新月異的今天,人機交互界面(HMI)設計正以前所未有的速度發展,不斷引領著未來的交互世界。從簡單的按鈕和圖標,到如今的智能助手和虛擬現實,HMI設計不僅改變了我們的生活方式,還深刻影響…

洛谷題單3-P1217 [USACO1.5] 回文質數 Prime Palindromes-python-流程圖重構

題目描述 因為 151 151 151 既是一個質數又是一個回文數&#xff08;從左到右和從右到左是看一樣的&#xff09;&#xff0c;所以 151 151 151 是回文質數。 寫一個程序來找出范圍 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000…

學習筆記,DbContext context 對象是保存了所有用戶對象嗎

DbContext 并不會將所有用戶對象保存在內存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的數據庫上下文&#xff0c;它是一個數據庫訪問的抽象層它實際上是與數據庫的一個連接會話&#xff0c;而不是數據的內存緩存當您通過 _context.Users 查詢數據時&…

本地命令行啟動服務并連接MySQL8

啟動服務命令 net start mysql8 關閉服務命令 net stop mysql8 本地連接MySQL數據庫mysql -u [用戶名] -p[密碼] 這里&#xff0c;我遇到了個問題 —— 啟動、關閉服務時&#xff0c;顯示 “發生系統錯誤 5。拒絕訪問。 ” 解法1&#xff1a;在 Windows 上以管理員身份打開…

數據蒸餾:Dataset Distillation by Matching Training Trajectories 論文翻譯和理解

一、TL&#xff1b;DR 數據集蒸餾的任務是合成一個較小的數據集&#xff0c;使得在該合成數據集上訓練的模型能夠達到在完整數據集上訓練的模型相同的測試準確率&#xff0c;號稱優于coreset的選擇方法本文中&#xff0c;對于給定的網絡&#xff0c;我們在蒸餾數據上對其進行幾…

【spring cloud Netflix】Ribbon組件

1.基本概念 SpringCloud Ribbon是基于Netflix Ribbon 實現的一套客戶端負載均衡的工具。簡單的說&#xff0c;Ribbon 是 Netflix 發布的開源項目&#xff0c;主要功能是提供客戶端的軟件負載均衡算法&#xff0c;將 Netflix 的中間層服務連接在一 起。Ribbon 的客戶端組件提供…

P1036 [NOIP 2002 普及組] 選數(DFS)

題目描述 已知 n 個整數 x1?,x2?,?,xn?&#xff0c;以及 1 個整數 k&#xff08;k<n&#xff09;。從 n 個整數中任選 k 個整數相加&#xff0c;可分別得到一系列的和。例如當 n4&#xff0c;k3&#xff0c;4 個整數分別為 3,7,12,19 時&#xff0c;可得全部的組合與它…

在響應式網頁的開發中使用固定布局、流式布局、彈性布局哪種更好

一、首先看下固定布局與流體布局的區別 &#xff08;一&#xff09;固定布局 固定布局的網頁有一個固定寬度的容器&#xff0c;內部組件寬度可以是固定像素值或百分比。其容器元素不會移動&#xff0c;無論訪客屏幕分辨率如何&#xff0c;看到的網頁寬度都相同。現代網頁設計…