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

java中ThreadLocal取不到值的兩種原因

 更新時(shí)間:2020年11月17日 14:09:55   作者:WZTTMoon  
這篇文章主要介紹了java中ThreadLocal取不到值的兩種原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.兩種原因

第一種,也是最常見(jiàn)的一種,就是多個(gè)線程使用ThreadLocal

第二種,類(lèi)加載器不同造成取不到值,本質(zhì)原因就是不同類(lèi)加載器造成多個(gè)ThreadLocal對(duì)象

public class StaticClassLoaderTest {
  protected static final ThreadLocal<Object> local = new ThreadLocal<Object>();
  //cusLoader加載器加載的對(duì)象
  private Test3 test3;

  public StaticClassLoaderTest() {
    try {
      test3 = (Test3) Class.forName("gittest.Test3", true, new cusLoader()).newInstance();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  public Test3 getTest3() {
    return test3;
  }
  public static void main(String[] args) {
    try {
      //默認(rèn)類(lèi)加載器加載StaticClassLoaderTest,并設(shè)置值
      StaticClassLoaderTest.local.set(new Object());
      new StaticClassLoaderTest().getTest3();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  //自定義類(lèi)加載器
  public static class cusLoader extends ClassLoader {
    @Override
    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
      if (name.contains("StaticClassLoaderTest")) {
        InputStream is = Thread.currentThread().getContextClassLoader()
            .getResourceAsStream(name.replace(".", "/") + ".class");
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
          IOUtils.copy(is, output);
          return defineClass(output.toByteArray(), 0, output.toByteArray().length);
        }
        catch (IOException e) {
          e.printStackTrace();
        }
      }
      return super.loadClass(name, resolve);
    }
  }

}

public class Test3 {

  public void test() {
    //由cusLoader加載器加載StaticClassLoaderTest,并獲取值,由于StaticClassLoaderTest并不相同所以無(wú)法獲取到值
    System.out.println(StaticClassLoaderTest.local.get());
  }
}
 

2.總結(jié)

2個(gè)累加器加載的對(duì)象引用了相同的靜態(tài)變量ThreadLocal,實(shí)際上ThreadLocal并不是同一個(gè)值,所以即使在一個(gè)線程中也獲取不到期望的值。

像依賴(lài)注入,如果你自己創(chuàng)建了一個(gè)對(duì)象,然后用手動(dòng)注入了一個(gè)容器創(chuàng)建的依賴(lài),假設(shè)這個(gè)依賴(lài)是自定義類(lèi)加器創(chuàng)建的,可能會(huì)造成這種情況。

到此這篇關(guān)于java中ThreadLocal取不到值的兩種原因的文章就介紹到這了,更多相關(guān)java ThreadLocal取不到值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java中實(shí)現(xiàn)SHA1與MD5加密算法的基本方法

    詳解Java中實(shí)現(xiàn)SHA1與MD5加密算法的基本方法

    這篇文章主要介紹了詳解Java中實(shí)現(xiàn)SHA1與MD5加密算法的基本方法,安全哈希算法第一版和消息摘要算法第五版也是通常人們最常用的加密算法,需要的朋友可以參考下
    2016-04-04
  • 詳解Spring 注解之@Import 注入的各種花活

    詳解Spring 注解之@Import 注入的各種花活

    這篇文章主要介紹了詳解Spring 注解之@Import 注入的各種花活,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 教你用JDK編譯Java文件的方法

    教你用JDK編譯Java文件的方法

    這篇文章主要介紹了教你用JDK編譯Java文件的方法,分步驟給大家介紹了設(shè)置環(huán)境變量的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)

    Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)

    這篇文章主要介紹了Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn),文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Java中的內(nèi)存屏障

    詳解Java中的內(nèi)存屏障

    這篇文章主要介紹了Java中的內(nèi)存屏障的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-05-05
  • SpringBoot+MyBatis-Plus+Velocity實(shí)現(xiàn)代碼自動(dòng)生成

    SpringBoot+MyBatis-Plus+Velocity實(shí)現(xiàn)代碼自動(dòng)生成

    本文主要介紹了使用SpringBoot、MyBatis-Plus和Velocity模板引擎實(shí)現(xiàn)代碼自動(dòng)生成器,該生成器能夠根據(jù)數(shù)據(jù)庫(kù)表結(jié)構(gòu)自動(dòng)生成增刪改查操作的代碼,感興趣的可以了解一下
    2025-03-03
  • Spring jcl及spring core源碼深度解析

    Spring jcl及spring core源碼深度解析

    這篇文章主要為大家介紹了Spring jcl及spring core源碼深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java判斷字符串是否有逗號(hào)的方法

    java判斷字符串是否有逗號(hào)的方法

    下面小編就為大家?guī)?lái)一篇java判斷字符串是否有逗號(hào)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • SpringBoot3集成SpringSecurity+JWT的實(shí)現(xiàn)

    SpringBoot3集成SpringSecurity+JWT的實(shí)現(xiàn)

    本文詳解SpringBoot3整合SpringSecurity與JWT實(shí)現(xiàn)認(rèn)證授權(quán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Java CompletableFuture如何實(shí)現(xiàn)超時(shí)功能

    Java CompletableFuture如何實(shí)現(xiàn)超時(shí)功能

    這篇文章主要為大家介紹了實(shí)現(xiàn)超時(shí)功能的基本思路以及CompletableFuture(之后簡(jiǎn)稱(chēng)CF)是如何通過(guò)代碼實(shí)現(xiàn)超時(shí)功能的,需要的小伙伴可以了解下
    2025-01-01

最新評(píng)論

交口县| 凤翔县| 双柏县| 庆阳市| 永年县| 惠安县| 宜都市| 淮南市| 常熟市| 乐至县| 隆林| 青川县| 保德县| 罗田县| 大足县| 龙井市| 天台县| 平乐县| 长顺县| 芷江| 泉州市| 砀山县| 嵊泗县| 江都市| 化德县| 乌鲁木齐县| 留坝县| 永善县| 鄄城县| 汝城县| 富锦市| 梁平县| 长岭县| 黔西县| 尤溪县| 焉耆| 水城县| 辛集市| 黑水县| 高清| 安图县|