兩分鐘讀懂ThreadLocal
ThreadLocal的工作原理
場景
假設一個使用者是一個執行緒。他們都對資料庫進行操作,這個時候就會每個使用者就會從資料來源中開啟一個事務以確保能夠順利的開啟或者關閉事務。那麼如何保證使用者與使用者之間的資料庫連線不發生衝突呢?就是用ThreadLocal。
原理解釋
這裡先交代一下,每一個執行緒都有自己的一個Map集合叫做ThreadLocalMap他是執行緒的一個靜態內部類它就是用來儲存連線的集合,ThreadLocal是一個工具類它負責將一個連線放入到每一個執行緒的Map集合中。具體來說就是每來一個使用者,資料來源就會建立一個連線Connection然後ThreadLocal工具類會將這個新建立的Connection新增到新來使用者的Map集合中,並且以Map<ThreadLocal,Object>的方式存入。又因為這個Map是每一個執行緒(使用者)所特有的,所以每個執行緒會從自己的Map中拿出屬於自己的Connection,這樣使用者之間的Connection就不會發生混亂。
底層原始碼
當我們要將一個conn放入對應的執行緒中時呼叫threadLocal.set()程式碼如下:
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); } |
當我們想要得到每個執行緒的conn時:
public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) return (T)e.value; } return setInitialValue(); } |
不難發現,get和set操作都是對當前執行緒做操作。
這就是著名的ThreadLocal。
相關推薦
兩分鐘讀懂ThreadLocal
ThreadLocal的工作原理 場景 假設一個使用者是一個執行緒。他們都對資料庫進行操作,這個時候就會每個使用者就會從資料來源中開啟一個事務以確保能夠順利的開啟或者關閉事務。那麼如何保證使用者與使
兩分鐘讀懂《成大事者不糾結》——讀書筆記
迷茫的時候,就將眼前的事做好。將眼前的事情做到了極致,下一步就會自然而然的出現到你面前。 ——北漂周 聽說羅胖已經很久了,一直沒有機會去看他的節目。最近剛好有空買了一本
三分鐘讀懂TT貓分布式、微服務和集群之路
lin down 負載 參考 業務 應該 要求 大型網站技術架構 模型 三分鐘讀懂TT貓分布式、微服務和集群之路 針對新手入門的普及,有過大型網站技術架構牛人路過,別耽誤浪費了時間,閱讀之前,請確保有一定的網絡基礎,熟練使用Linux,瀏覽大概需要3-5分鐘的時間
一片非常有趣的文章 三分鐘讀懂TT貓分布式、微服務和集群之路
完成 在線購物 重新 負載均衡器 新手入門 們的 title 風險 用戶訪問 原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分鐘讀懂TT貓分布式、微服務和集群之路 針對新手入門的普及,有過
1分鐘讀懂移動端em和rem的區別
字號 http light rem 你會 AS 圖片 clas eight rem和em其實都是相對單位,但rem是想對於html根元素字號,而em是相當於使用em單位的元素字號大小 教程幫你梳理清楚! html布局: <div class="container
三分鐘讀懂摘要算法
密碼 and shu throw string cat ack NPU 原因 摘要算法又稱哈希算法,它表示輸入任意長度的數據,輸出固定長度的數據,相同的輸入數據始終得到相同的輸出,不同的輸入數據盡量得到不同的輸出。 Java中的Object.hashCode()方法就是一個
【轉】五分鐘讀懂大數據核心MapReduce架構及原理
變化 架構 解析 重要 輸出結果 讀取 英文單詞 性能 行處理 什麽是MapReduce Hadoop中的MapReduce是一個簡單的軟件框架,基於它寫出的應用程序可以運行在由上千個商用機器組成的大型集群上,並以一種可靠容錯式並行處理TB級數據 MapReduce的起
一分鐘讀懂低功耗藍牙(BLE)廣播數據包
藍牙4.0 鏈接 and edi its shadow ner limited 藍牙 低功耗藍牙 =》 BLE (Bluetooth Low Energy) 怎樣抓取BLE廣播數據包 硬件:一個BLE設備(具有廣播功能);一臺HOLLONG BLE SNIFFER 軟
【高軟作業4】:Tomcat 觀察者模式解析 之 Lifecycle 五分鐘讀懂UML類圖
一. 預備 如果你是Windows使用者,使用Eclipse,並且想自行匯入原始碼進行分析,你可能需要:Eclipse 匯入 Tomcat 原始碼 如果你已遺忘 觀察者模式,那麼你可以通過該文章回顧:設計模式(五)觀察者模式 如果你已遺忘 UML類圖相關知識,那麼你可以通過文章 (五分鐘讀懂U
一分鐘讀懂低功耗藍芽(BLE)MTU交換資料包
1.概述 * MTU: 最大傳輸單元(MAXIMUM TRANSMISSION UNIT) , 指在一個PDU (Protocol Data Unit: 協議資料單元,在一個傳輸單元中的有效傳輸數據)能夠傳輸的最大資料量(多少位元組可以一次性傳輸到對方)。  
一分鐘讀懂低功耗藍芽(BLE)連線資料包
一分鐘讀懂低功耗藍芽(BLE)連線資料包1.概述 BLE 連線過程中有三個重要的資料包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。 SCAN_REQ: 掃描請求,由主裝置(MASTER DEVICE)向從裝置(SLAVE DEV
一分鐘讀懂低功耗藍芽(BLE)廣播資料包
一分鐘讀懂低功耗藍芽(BLE)廣播資料包 低功耗藍芽 =》 BLE (Bluetooth Low Energy) 1. 怎樣抓取BLE廣播資料包 * 硬體:一個BLE裝置(具有廣播功能); 一臺H
一分鐘讀懂低功耗藍芽連線資料包
一分鐘讀懂低功耗藍芽(BLE)連線資料包1.概述 BLE 連線過程中有三個重要的資料包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。 SCAN_REQ: 掃描請求,由主裝置(MASTER DEVICE)向從裝置(SLAVE DEV
分分鐘讀懂移動端rem使用方法
1、為什麼要用rem 移動端最麻煩的是什麼? 不同解析度適配! 具體來說,有的螢幕320px寬,有的螢幕640px寬,有的更寬,如果你寫固定px,那麼要麼小的放不下,要麼大的有大片空白。 怎麼辦? 如果元素固定佔用螢幕空間(一般是指寬度而非高度,下同)的
五分鐘讀懂UML類圖
fyi 設計應用 存在 私有屬性 繼承關系 per prot eth 單向 平時閱讀一些遠嗎分析類文章或是設計應用架構時沒少與UML類圖打交道。實際上,UML類圖中最常用到的元素五分鐘就能掌握,下面趕緊來一起認識一下它吧: 一、類的屬性的表示方式 在UML類圖中,類使用包含
五分鐘讀懂原始碼——Square開源網路請求庫OkHttp的工作原理解析
前言 說句廢話,作為一個工作幾年的程式設計師,在日常工作中,難免會用一些三方封裝庫,來方便我們的開發,但是不能僅僅會用就滿足,我們還了解它的工作原理。 正文 轉入正題,看到本文的朋友應該知道了OK給出的API的基本呼叫(本文不對基本使用做介紹,有需要自行看https://gi
五分鐘讀懂鵝廠物聯網架構佈局
本文從物聯網的中心要素、物聯網的關鍵場景、微信硬體平臺的通訊協議剖析三個維度去剖析基於微信硬體平臺的物聯網架構。 一、基於微信硬體平臺的物聯網架構圖 上圖涵蓋以下資訊: 基於微信硬體平臺的物聯網的架構組成,有微信大眾平臺/硬體平臺、第三方廠商雲後端、手機微信/大眾號、微信硬體
一分鐘讀懂PDCA 迴圈 5W2H分析法——你肯定聽過的一種思維工具 你真的懂如何進行使用者調查麼? 精選網際網路運營必讀的 8 本書籍
這是與你分享的第 ② 種思維方法:PDCA 迴圈; 原文來自WX公眾號【運營進階之路】 什麼是PDCA迴圈? PDCA 迴圈因為經戴明博士在日本推廣應用,所以,又稱“戴明環”。 PDCA 迴圈分為4個階段,如下: P(Plan):計劃,確定方針和
深度|10分鐘讀懂阿里巴巴高階專家在Flutter Live2018的分享
作者:閒魚技術-宗心 12月4日,google flutter團隊宣佈第一個flutter正式版本釋出。次日,Flutter Live Beijing 會議上,google flutter團隊邀請了在這一技術方案中重要的合作伙伴閒魚團隊分享這半年以來的通過flutter產出的業務結果以及對應的技術挑戰。本文
一分鐘讀懂相容測試報告(一):概況篇
WeTest 導讀 在WeTest深度相容測試上線之後,為大量手遊及應用挖掘了相容問題,為測試開發同學提供了極大的便利。為了能夠讓測試開發同學能夠迅速的瞭解測試後的結果,您是否真的讀懂了WeTest的相容報告?是否瞭解具體問題的準確定位?