多线程:什么是ThreadLocal?应用场景?
ThreadLocal(避免線程不安全問題)
?
什么是ThreadLocal?
? ?線程本地變量,也有些地方叫做線程本地存儲(chǔ),他代表一個(gè)線程局部變量。
為什么要ThreadLocal?
? ? 如果一段代碼中所需要的數(shù)據(jù)必須與其他代碼共享,那就看看這些共享數(shù)據(jù)的代碼能否保證在同一個(gè)線程中執(zhí)行?如果能夠保證,我們就可以把共享數(shù)據(jù)的可見范圍限定在同一個(gè)線程之內(nèi),這樣無需同步,也能夠保證線程之間不出現(xiàn)數(shù)據(jù)的爭(zhēng)用問題了。
? 面向的問題是從根本上避免多個(gè)線程對(duì)共享資源的競(jìng)爭(zhēng),是為了隔離多個(gè)線程的數(shù)據(jù)共享,也就不需要對(duì)多個(gè)線程進(jìn)行同步了。
? ? 通過把數(shù)據(jù)放在ThreadLocal中就可以讓每個(gè)線程創(chuàng)建一個(gè)該變量的副本。從而避免了并發(fā)訪問時(shí)線程安全的問題了。
private ThreadLocal<String> name = new ThreadLocal<>();ThreadLocal的應(yīng)用場(chǎng)景
? ? ? ? 最常見的ThreadLocal使用場(chǎng)景為 用來解決數(shù)據(jù)庫連接、Session管理等。如:
? ? ? ? 數(shù)據(jù)庫連接:
Java代碼 ?
? ? ? ? Session管理:
Java代碼 ?
?
總結(jié)
以上是生活随笔為你收集整理的多线程:什么是ThreadLocal?应用场景?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程:线程池里的队列BlockingQ
- 下一篇: 多线程:Executor、Sleep、D