大白話講解ThreadLocal的原理

2021-08-06 03:12:21 字數 1044 閱讀 5659

threadlocal顧名思義,本地執行緒,可以理解為本地執行緒變數,說白了就是操作本地執行緒的區域性變數。

下面我們通過原始碼進行說明:

首先,我們看一下threadlocal的set方法原始碼實現:

public void set(t value)
通過原始碼我們可以發現,首先獲取了當前執行緒,然後呼叫getmap方法,將當前執行緒傳了進去,返回了threadlocalmap。我們先來看一下getmap

方法。

threadlocalmap getmap(thread t)
嗯??返回了當前執行緒的threadlocals,所以我們知道了,原來threadlocalmap是當前執行緒的乙個變數的型別,所以這個threadlocals是執行緒自己

本身就有的東西,屬於thread。

然後再看set方法,當map不為空,將this即threadlocal當key,這裡也許有同學不理解了,為什麼要將threadlocal當key呢?

因為我們不一定就乙個threadlocal,有可能有多個,而threadlocals是執行緒自己本身的,如果有多個threadlocal,也就是有

多個值需要儲存到threadlocals中,我們就可以通過threadlocal來取出不同的資訊。

還是有點迷糊??

其實說白了就是,每乙個thread執行緒都擁有自己的乙個型別為threadlocalmap,名稱為threadlocals的區域性變數,就像名字表達的這樣,這個變數可以

以threadlocal為key進行儲存自己的資訊。而threadlocal其實就是為了使我們操作threadlocals變數更加方便,而封裝的乙個類。使用threadlocal和

我們直接自己定義執行緒的區域性變數都一樣,只是使用threadlocal使我們的**更加優雅,簡潔。我們不用關注執行緒,只需要操作threadlocal就可以取得

該執行緒自己的變數

上面是我根據自己的理解畫的圖,如果不對,請及時指正。

大白話講解Spring的 bean註解

從廣義上spring註解可以分為兩類 一類註解是用於註冊bean 假如ioc容器就是一間空屋子,首先這間空屋子啥都沒有,我們要吃大餐,我們就要從外部搬運食材和餐具進來。這裡把某一樣食材或者某一樣餐具搬進空屋子的操作就相當於每個註冊bean的註解作用類似。註冊bean的註解作用就是往ioc容器中放 註...

大白話講解C 中的委託

有一天,你寫了好多好多帶 形參 的建構函式 就是 方法 同義 而且需要向這些建構函式裡傳遞同樣的 實參 然後你就憨憨地乙個乙個函式的呼叫並賦予同樣的 實參 這一天就這麼過去了.又過了幾天,你又要再一次呼叫這麼多函式了,你再老老實實地乙個乙個函式進行呼叫?聰明的你,肯定會想 真tm麻煩!有沒有一勞永逸...

mysql用大白話解釋 大白話說說mysql索引

前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...