欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于ThreadLocal和InheritableThreadLocal解析

 更新時(shí)間:2025年03月31日 09:23:28   作者:Old Wang  
這篇文章主要介紹了關(guān)于ThreadLocal和InheritableThreadLocal解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、兩者區(qū)別

  • ThreadLocal:為每一個(gè)線程創(chuàng)建一個(gè)副本,每個(gè)副本線程隔離。但是他不支持繼承。
  • InheritableThreadLocal:支持繼承。這里的繼承不是extends,是指線程的繼承。也就是說新起一個(gè)線程可以擁有老線程的數(shù)據(jù)。

二、原理

這里要先說另一個(gè)概念ThreadLocalMap。他和普通map差不多,也是key-value結(jié)構(gòu),key為threadlocal對(duì)象,value為你設(shè)置的值。

為什么這里要用map,因?yàn)榭赡苡卸鄠€(gè)ThreadLocal對(duì)象。所以這個(gè)map可以理解為倉庫,存儲(chǔ)數(shù)據(jù)的倉庫。

在Thread類我們可以看到如下分別創(chuàng)建2個(gè) ThreadLocalMap對(duì)象。用來存儲(chǔ)數(shù)據(jù)。

繼續(xù)追蹤,查找它是什么時(shí)候被賦值的(分為ThreadLocal實(shí)現(xiàn)和InheritableThreadLocal實(shí)現(xiàn))。

  • ThreadLocal:在ThreadLocal類的set方法,它調(diào)用當(dāng)前線程獲取ThreadLocalMap,如果沒有就new一個(gè)

  • InheritableThreadLocal:重寫了getMap和createMap兩個(gè)方法。

OK,我們知道是怎么賦值的,那么InheritableThreadLocal是怎么做到繼承(值傳遞)的呢?

在Thread的init方法里我們看到如下的賦值語句:

在初始化時(shí)候獲取當(dāng)前線程的inheritableThreadLocals(這是新線程的初始化,但是currentThread獲取的還是老線程),把它賦值到新線程的屬性里去,這樣新線程就有值了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Data?JPA映射自定義實(shí)體類操作

    Spring?Data?JPA映射自定義實(shí)體類操作

    這篇文章主要介紹了Spring?Data?JPA映射自定義實(shí)體類操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • MyBatis啟動(dòng)時(shí)控制臺(tái)無限輸出日志的原因及解決辦法

    MyBatis啟動(dòng)時(shí)控制臺(tái)無限輸出日志的原因及解決辦法

    這篇文章主要介紹了MyBatis啟動(dòng)時(shí)控制臺(tái)無限輸出日志的原因及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Java中鍵盤輸入的幾種常見方式小結(jié)

    Java中鍵盤輸入的幾種常見方式小結(jié)

    本文主要介紹了Java中鍵盤輸入的幾種常見方式小結(jié),主要是三種方式IO流、Scanner類、BufferedReader寫入,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • SpringCloud應(yīng)用idea實(shí)現(xiàn)可相互調(diào)用的多模塊程序詳解

    SpringCloud應(yīng)用idea實(shí)現(xiàn)可相互調(diào)用的多模塊程序詳解

    IDEA 全稱 IntelliJ IDEA,是java編程語言的集成開發(fā)環(huán)境。IntelliJ在業(yè)界被公認(rèn)為最好的Java開發(fā)工具,尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能可以說是超常的
    2022-07-07
  • Java及數(shù)據(jù)庫對(duì)日期進(jìn)行格式化方式

    Java及數(shù)據(jù)庫對(duì)日期進(jìn)行格式化方式

    這篇文章主要介紹了Java及數(shù)據(jù)庫對(duì)日期進(jìn)行格式化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • MapStruct內(nèi)部錯(cuò)誤:NullPointerException的解決方案

    MapStruct內(nèi)部錯(cuò)誤:NullPointerException的解決方案

    在Java開發(fā)中,MapStruct是一個(gè)非常流行的對(duì)象映射工具,它通過注解處理器在編譯時(shí)生成映射代碼,極大地簡(jiǎn)化了對(duì)象之間的轉(zhuǎn)換操作,本文將詳細(xì)分析一個(gè)常見的MapStruct內(nèi)部錯(cuò)誤——NullPointerException,并提供一系列解決方案,需要的朋友可以參考下
    2025-02-02
  • 教你怎么使用Java實(shí)現(xiàn)WebSocket

    教你怎么使用Java實(shí)現(xiàn)WebSocket

    這篇文章主要介紹了教你怎么使用Java WebSocket,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Spring加載配置和讀取多個(gè)Properties文件的講解

    Spring加載配置和讀取多個(gè)Properties文件的講解

    今天小編就為大家分享一篇關(guān)于Spring加載配置和讀取多個(gè)Properties文件的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Springboot多數(shù)據(jù)源配置之整合dynamic-datasource方式

    Springboot多數(shù)據(jù)源配置之整合dynamic-datasource方式

    這篇文章主要介紹了Springboot多數(shù)據(jù)源配置之整合dynamic-datasource方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中的重要核心知識(shí)點(diǎn)之繼承詳解

    Java中的重要核心知識(shí)點(diǎn)之繼承詳解

    繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類。繼承就是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2021-10-10

最新評(píng)論