JAVA并發——為什么Java中的ThreadLocal對key的引用為弱引用

1、ThreadLocal 的用途

給每個線程提供自己獨立的變量副本,實現線程間隔離。

常用于:

  • 數據庫連接、Session 緩存、用戶上下文(如 userId)
  • 線程池中的線程復用時避免共享污染;
  • 實現線程封閉的設計模式

2、內存泄漏

使用弱引用作為 ThreadLocal 的鍵可以防止內存泄漏。若 Threadlocal 實例被不再需要的線程持有為強引用,那么當該線程結束時,相關的 ThreadLocal 實例及其對應的數據可能無法被回收,導致內存持續占用。而弱引用允許垃圾回收器在內存不足時回收對象。這樣,當沒有其他強引用指向某個 Threadlocal 實例時,它可以被及時回收,避免長時間占用內存。

如果使用強引用,可能有人會說那線程被回收之后就好了呀。重點來了!線程在我們應用中,常常是以線程池的方式來使用的,比如 Tomcat 的線程池處理了一堆請求,而線程池中的線程一般是不會被清理掉的,所以這個引用鏈就會一直在,那么 ThreadLocal對象即使沒有用了,也會隨著線程的存在,而一直存在著!

所以這條引用鏈需要弱化一下,而能操作的只有 Entry 和 key 之間的引用,所以它們之間用弱引用來實現。

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

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

相關文章

【C++】多線程同步三劍客介紹

目錄 條件變量 頭文件 主要操作函數 1、等待操作 2、喚醒操作 使用示例 信號量 頭文件 主要操作函數 1、信號量初始化 2、等待操作(P操作) 3、信號操作(V操作) 4、獲取信號量值 5、銷毀信號量 使用示例 互斥鎖 …

《Java Web程序設計》實驗報告八 JSP+Servlet+JDBC+MySQL實現課程管理

目 錄 一、實驗目的 二、實驗環境 三、實驗步驟和內容 1、小組成員分工(共計4人) 2、實驗方案 3、實驗結果與分析 4、項目任務評價 四、遇到的問題和解決方法 五、實驗總結 一、實驗目的 1、掌握mysql的安裝、數據庫表單創建 2、掌握JDBC的鏈接…

基于數據挖掘的課程推薦系統研究

摘要本研究設計并開發了一套基于先進數據挖掘技術的智能化課程推薦系統。該系統創新性地采用了協同過濾算法與內容推薦算法相結合的混合推薦策略,通過深度分析學生在學習平臺上的歷史行為數據(包括選課記錄、學習時長、測試成績等)以及課程的…

【SCI 4區推薦】《Journal of Visual Communication and Image Representation》

期刊簡介:《視覺傳達與圖像表示雜志》(Journal of Visual Communication and Image Representation)致力于發表視覺傳達與圖像表示領域的最前沿研究,特別強調多學科交叉領域中的新技術和理論應用。這本期刊涵蓋的研究范圍廣泛&…

20250711_Sudo 靶機復盤

target:192.168.43.20 外部打點 (文件上傳) nmap掃一下,80,22 開放 掃目錄,發現 README.md [17:04:30] 200 - 664B - /Dockerfile [17:04:38] 200 - 34KB - /LICENSE …

STEP 7-Micro/WIN SMART 編程軟件:從入門到精通的使用指南

STEP 7-Micro/WIN SMART 編程軟件:從入門到精通的使用指南 在工業自動化控制領域,編程軟件是連接工程師與 PLC 的橋梁,而 STEP 7-Micro/WIN SMART 作為 S7-200 SMART PLC 的專用編程工具,以其友好的界面和高效的編程能力備受青睞。…

模型訓練與部署注意事項篇---resize

圖像大小的影響在 YOLOv 系列模型的訓練和推理部署過程中,圖像大小的選擇是影響模型性能(精度、速度、泛化能力)的關鍵因素之一。兩者的關系既相互關聯,又存在一定的靈活性,具體可從以下幾個方面詳細分析:一…

【Python】venv:配置獨立鏡像源

為某個特定的 venv 虛擬環境設置 pip 鏡像源,使得該環境下的 pip 安裝始終使用自定義鏡像源,不影響系統 pip,也不依賴用戶級配置文件。環境準備 1. 創建虛擬環境 python -m venv venv2. 激活虛擬環境Windows: .\venv\Scripts\activateLinux/m…

日本語言學校:簽證制度類 Prompt 的結構整理路徑與策略

日本語言學校:簽證制度類 Prompt 的結構整理路徑與策略 我們在構建語言留學語義系統的過程中,嘗試以“簽證風險”為例,探索如何讓結構信息被更好地保留下來。本文不介紹 Prompt 本身,也不夸大其作用,而是希望借此與更…

RFCOMM協議詳解:串口仿真與TCP/IP協議棧移植技術——面試高頻考點與真題解析

一、RFCOMM 協議核心考點與高頻面試問題1.1 協議基礎與核心功能考點解析:RFCOMM(Radio Frequency Communication)是藍牙協議棧中實現串口仿真的核心協議,基于 L2CAP 協議提供類似 RS-232 的可靠數據流傳輸。其核心功能包括&#x…

【編程實踐】利用open3d生成物體的最長邊方向并可視化

1 利用3d軟件生成一個長方體 邊長隨意,長度隨意 2 導出為模型文件并采樣為點云數據 從mesh表面進行采樣,點數根據自己需求進行設置,此處設置為100000。采樣結果:3 識別OBB外接框并可視化長邊方向import numpy as np import open3d…

1. 好的設計原則

目錄一、應該具備的性質二、面向對象設計原則三、詳解3.1 開閉原則3.2 單一職責原則3.3 里氏替換原則3.4 依賴倒置原則3.5 接口隔離原則3.6 合成復用原則3.7 迪米特原則一、應該具備的性質 可擴展性靈活性可插入性 二、面向對象設計原則 以下設計原則的重要性從高到低排列 …

深度學習圖像分類數據集—貓七種表情識別分類

該數據集為圖像分類數據集,適用于ResNet、VGG等卷積神經網絡,SENet、CBAM等注意力機制相關算法,Vision Transformer等Transformer相關算法。 數據集信息介紹:貓七種表情識別分類:[Angry, Disgusted, Happy, Normal, Sa…

002_Claude模型與定價

Claude模型與定價 目錄 Claude 4 模型系列模型功能對比定價策略計費說明企業定價使用建議 Claude 4 模型系列 Anthropic 推出了最新的 Claude 4 系列模型,提供不同性能等級以滿足各種需求: Claude Opus 4 定位:最強大、最智能的模型特點…

【牛客刷題】游游的字母串

文章目錄 一、題目介紹1.1 題目描述1.2 輸入描述:1.3 輸出描述:1.4 示例1二、解題二、解題思路2.1 核心問題2.2 關鍵策略三、算法分析3.1 為什么正確?3.2 復雜度分析四、模擬演練五、完整代碼一、題目介紹 題目:游游的字母串 1.1 題目描述 對于一個小寫字母而言,游游可以通…

docker容器高級管理-dockerfile創建鏡像

目錄一.構建LNMP架構1.構建nginx容器①拉取centos鏡像(對鏡像做基礎架構)②創建dockerfile工作目錄(可以是一個服務的項目)③創建dockerfile④創建啟動腳本2.構建mysql數據庫①創建mysql項目②配置dockersfile文件④創建鏡像文件3…

北京-4年功能測試2年空窗-報培訓班學測開-第四十九天

今天自習,在自習室嚶…今天效率不高,導致焦慮。不,或者該說,因為焦慮導致效率不高?沒有達到自己預期,對自己也不滿意臨近結課,突然有些迷茫,我知道我要做的還有很多,要學…

css選擇器的優先級以及用法

在 CSS 中,當多個選擇器同時作用于一個元素,并且為該元素的同一屬性設置了不同的值時,就需要依據選擇器的優先級來確定最終應用哪個樣式。本文詳細介紹 CSS 選擇器優先級的相關內容。 本文目錄一、單個選擇器的優先級1. 內聯樣式2. ID 選擇器…

hercules zos 安裝 jdk 8

首先到 IBM 官網下載相關 PAX 檔 (SDK8_31bit_SR8_FP45.PAX.Z) 和 SDK8_31bit_readme.txt https://www.ibm.com/support/pages/java-sdk-products-zos 在 hercules 裡加一些新卷用來存放這個 JDK (UAPP02),UTMP02 也可以順便加上讓 OMVS IBMUSER 下多一些存放空間&…

張量索引操作

一.前言本期我們來說一下張量的索引操作,需要掌握張量不同索引操作,我們在操作張量時,經常需要去進?獲取或者修改操作,掌握張量的花式索引操作是必須的?項能?。二.簡單行、列索引import torchdata torch.randint(0, 10, [4, 5…