最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程中的ThreadLocal詳細分析

 更新時間:2023年09月26日 09:09:47   作者:西二旗C羅  
這篇文章主要介紹了Java線程中的ThreadLocal詳細分析,ThreadLocal?提供線程的局部變量,每個線程都可以通過?get()和?set()對局部變量進行操作而不會對其他線程的局部變量產生影響,實現(xiàn)了線程之間的數據隔離,需要的朋友可以參考下

ThreadLocal簡介

ThreadLocal 提供線程的局部變量,每個線程都可以通過 get() 和 set() 對局部變量進行操作而不會對其他線程的局部變量產生影響,實現(xiàn)了線程之間的數據隔離。

原理代碼

ThreadLocal<String> tl = new ThreadLocal<>();
new Thread(()->{
    try {
        tl.set("你好");
        System.out.println(tl.get());
    } finally {
        tl.remove();
    }
},"線程1").start();
new Thread(()->{
    try {
        tl.set("我好");
        System.out.println(tl.get());
    } finally {
        tl.remove();
    }
},"線程2").start();

原理描述

  • 每個 Thread 維護著一個 ThreadLocalMap 的引用
  • ThreadLocalMap 是 ThreadLocal 的內部類,用 Entry 來進行存儲
  • 調用 ThreadLocal 的 set() 方法時,實際上就是往 ThreadLocalMap 設置值,key 是 ThreadLocal 對象,值是傳遞進來的對象
  • 調用 ThreadLocal 的 get() 方法時,實際上就是往 ThreadLocalMap 獲取值,key 是 ThreadLocal 對象
  • ThreadLocal 本身并不存儲值,它只是作為一個 key 來讓線程從 ThreadLocalMap 獲取 value。

Thread 和 ThreadLocal 中 ThreadLocalMap 的數據結構和關系 

ThreadLocalMap 中的 Key 是弱引用,這是為什么?

在這里插入圖片描述

當引用 ThreadLocal 的方法結束的時候,此時 threadLocal 對象不再被使用,此時應該將 threadLocal 對象清除,假設 key 引用 threadLocal 對象的時候時強引用,則該對象不會被清除,因此要采用弱引用。

ThreadLoca l中的內存泄露問題,ThreadLocal 中最后為什么要加 remove 方法

  • 正常情況下,我們線程結束之后,整個線程就會被銷毀,則 ThreadLocalMap 中的 Enty 也會被清除了
  • 但是在使用線程池的情況下,線程會被復用,此時 ThreadLocalMap 中的 Entry 不會被釋放,會存在這樣的 Entry:k:null value:222 這樣就會造成內存泄露
  • 所以每次都要調用remove 清除 key為 null 的Entry

到此這篇關于Java線程中的ThreadLocal詳細分析的文章就介紹到這了,更多相關Java的ThreadLocal內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis實現(xiàn)關聯(lián)關系映射的方法示例

    Mybatis實現(xiàn)關聯(lián)關系映射的方法示例

    本文主要介紹了Mybatis實現(xiàn)關聯(lián)關系映射的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • SpringCloud版本問題報錯及解決方法

    SpringCloud版本問題報錯及解決方法

    這篇文章主要介紹了SpringCloud版本問題報錯及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Java中的跨域和@CrossOrigin注解的作用詳解

    Java中的跨域和@CrossOrigin注解的作用詳解

    這篇文章主要介紹了Java中的跨域和@CrossOrigin注解的作用詳解,跨域,指的是瀏覽器不能執(zhí)行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript施加的安全限制,需要的朋友可以參考下
    2023-12-12
  • SpringBoot集成內存數據庫Sqlite的實踐

    SpringBoot集成內存數據庫Sqlite的實踐

    sqlite這樣的內存數據庫,小巧可愛,做小型服務端演示程序,非常好用,本文主要介紹了SpringBoot集成Sqlite,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • java模擬TCP通信實現(xiàn)客戶端上傳文件到服務器端

    java模擬TCP通信實現(xiàn)客戶端上傳文件到服務器端

    這篇文章主要為大家詳細介紹了java模擬TCP通信實現(xiàn)客戶端上傳文件到服務器端,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • java批量導入導出文件的實例分享(兼容xls,xlsx)

    java批量導入導出文件的實例分享(兼容xls,xlsx)

    這篇文章主要給大家介紹了利用java批量導入導出文件的相關資料,文中給出了詳細的實例代碼,并且兼容xls,xlsx,對大家具有一定的參考學習價值,下面跟著小編一起來看看詳細的介紹吧。
    2017-06-06
  • java lambda表達式用法總結

    java lambda表達式用法總結

    這篇文章主要介紹了java lamda表達式用法總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java 反射機制知識詳細介紹及總結

    Java 反射機制知識詳細介紹及總結

    反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調用對象的方法的功能稱為java語言的反射機制
    2017-01-01
  • 詳解Java 信號量Semaphore

    詳解Java 信號量Semaphore

    這篇文章主要介紹了Java 信號量Semaphore的相關資料,幫助大家更好的理解和學習Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • Java?Stream流常用方法實戰(zhàn)指南

    Java?Stream流常用方法實戰(zhàn)指南

    Stream流是Java 8中的一個新特性,它提供了一種處理集合和數組的方式,Stream流可以讓我們以一種更加簡潔、高效、可讀性更強的方式來處理數據,這篇文章主要介紹了Java?Stream流常用方法的相關資料,需要的朋友可以參考下
    2026-01-01

最新評論

漠河县| 龙岩市| 巴林右旗| 沧州市| 普宁市| 呼玛县| 永嘉县| 福安市| 山西省| 韩城市| 华宁县| 黄山市| 东丰县| 唐河县| 阿坝县| 邢台市| 班玛县| 紫金县| 三江| 彩票| 龙江县| 二连浩特市| 奈曼旗| 石阡县| 虞城县| 遵义市| 马关县| 安新县| 清流县| 方山县| 云和县| 新竹市| 临汾市| 寻甸| 栾城县| 唐山市| 德庆县| 凭祥市| 玉田县| 双桥区| 深圳市|