說明:本文是jdk 1.8版本
1.簡介:
threadlocal 又叫做執行緒本地變數,也被稱為執行緒本地儲存。threadlocal 為 變數 在每乙個執行緒中建立 乙個 副本(不是原來變數的引用),每乙個執行緒都會獨自擁有變數副本,而不會相互影響。
2.實現方式:
(1)set 方法,,因為執行緒thread 類中 內建了 threadlocal.threadlocalmap 型別的引用threadlocals,所以 set方法把把 使用者變數 儲存到執行緒的 變數threadlocals中
public voidset(t value)
threadlocalmap getmap(thread t)
voidthreadlocalmap 裡面 使用了entry 儲存資料,鍵 為 threadlocal,值為使用者變數createmap(thread t,
t firstvalue)
static class threadlocalmap}
(2) get方法,獲取當前執行緒中儲存的使用者變數
publict get()
}return setinitialvalue();//設定初始化的值
}
privatet setinitialvalue()
protectedt initialvalue()
3.**驗證 使用者變數是否存放到 執行緒中:
方式一:不重寫initialvalue方法
public class threadlocaldemo1輸出結果:public void
show()
public static void
main(string args) throws exception
};t.start();
t.join();
demo1.show();
}}
1main
11thread-0
1main
之前存放的值,因此可以看到 他們是 在每個執行緒中 建立了副本
方式二:重寫initialvalue方法
public class threadlocaldemo2};threadlocallongthreadlocal = new threadlocal()
};public void
show()
public static void
main(string args) throws exception
};t.start();
t.join();
demo1.show();
}}
輸出結果:
1main
11thread-0
1main
threadlocal 經常在管理資料庫連線,session 管理 中使用 :
使用場景的**摘抄自(摘抄自:
private static threadlocalconnectionholder= new threadlocal()
};
private static final threadlocal threadsession= new threadlocal();
public static session getsession() throws infrastructureexception
} catch (hibernateexception ex)
return s;
}
JDK原始碼解析 StringBuilder
stringbuilder和stringbuffer一樣,都是繼承自抽象類abstractstringbuilder類,也是乙個可變的字串行。stringbuilder和stringbuffer非常相似,甚至有互相相容的api,不過,stringbuilder不是執行緒安全的,這是和stringbu...
JDK原始碼解析 LinkedHashSet
linkedhashset是set集合的乙個實現,具有set集合不重複的特點,同時具有可 的迭代順序,也就是我們插入的順序。底層實現是linkedhashmap 所以僅在構造方法上和hashset有所區別 linkedhashmap和linkedhashset都可以做到有序,但是不同點在於。link...
JDK原始碼解析 Stack
stack是棧的實現類,棧的特點是先進後出。繼承了vector,重寫了5個方法,對vector進行了擴充套件。繼承了vector 3.1push 呼叫父類的addelement方法,新增到陣列的尾部,也就是棧頂 public e push e item 3.2 pop 出戰操作。public syn...