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

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

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

1.兩種原因

第一種,也是最常見的一種,就是多個線程使用ThreadLocal

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

public class StaticClassLoaderTest {
  protected static final ThreadLocal<Object> local = new ThreadLocal<Object>();
  //cusLoader加載器加載的對象
  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)類加載器加載StaticClassLoaderTest,并設(shè)置值
      StaticClassLoaderTest.local.set(new Object());
      new StaticClassLoaderTest().getTest3();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  //自定義類加載器
  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并不相同所以無法獲取到值
    System.out.println(StaticClassLoaderTest.local.get());
  }
}
 

2.總結(jié)

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

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

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

相關(guān)文章

  • Java多線程場景解析volatile和AtomicLong區(qū)別原理

    Java多線程場景解析volatile和AtomicLong區(qū)別原理

    這篇文章主要為大家介紹了Java中volatile和AtomicLong的區(qū)別原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解

    jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解

    這篇文章主要介紹了jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • java實(shí)現(xiàn)停車場管理系統(tǒng)

    java實(shí)現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 探究springboot中的TomcatMetricsBinder

    探究springboot中的TomcatMetricsBinder

    springboot的TomcatMetricsBinder主要是接收ApplicationStartedEvent然后創(chuàng)建TomcatMetrics執(zhí)行bindTo進(jìn)行注冊,TomcatMetrics主要注冊了globalRequest、servlet、cache、threadPool、session相關(guān)的指標(biāo),本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • feign實(shí)現(xiàn)傳遞參數(shù)的三種方式小結(jié)

    feign實(shí)現(xiàn)傳遞參數(shù)的三種方式小結(jié)

    這篇文章主要介紹了feign實(shí)現(xiàn)傳遞參數(shù)的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Maven中optional標(biāo)簽用法詳解

    Maven中optional標(biāo)簽用法詳解

    這篇文章主要介紹了Maven中optional標(biāo)簽,文章中有詳細(xì)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-05-05
  • Java之Class.forName()用法案例詳解

    Java之Class.forName()用法案例詳解

    這篇文章主要介紹了Java之Class.forName()用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解在Java中如何創(chuàng)建多線程程序

    詳解在Java中如何創(chuàng)建多線程程序

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著在Java中如何創(chuàng)建多線程程序展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)

    Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)

    這篇文章主要介紹了Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • logback-spring.xml的內(nèi)容格式詳解

    logback-spring.xml的內(nèi)容格式詳解

    這篇文章主要介紹了logback-spring.xml的內(nèi)容格式詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的的朋友參考下吧
    2023-11-11

最新評論