国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

ThreadLocal奪命4問

開發 前端
ThreadLocal作為實現“線程封閉”的最主要的編程手段,經常被使用。比如,比如,傳統的SimpleDateFormat,不是線程安全的。

[[376813]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗 。轉載本文請聯系小姐姐味道公眾號。  

閱讀本文需要首先大體了解ThreadLocal。不啰嗦,直接進入正題。

標簽:【各種級別】【Java】【源碼】

1. 問

連環四問:

  • ThreadLocal的原理?
  • 內存泄漏的原因?
  • InheritableThreadLocal用過嗎?
  • Netty的FastThreadLocal是什么?

2. 分析

ThreadLocal作為實現“線程封閉”的最主要的編程手段,經常被使用。比如,比如,傳統的SimpleDateFormat,不是線程安全的。如果你聲明成全局變量,在并發環境下就會產生時間錯亂。一種好的解決方式,就是使用ThreadLocal。

ThreadLocal使用非常廣泛。比如,Spring的事務管理,就是通過它實現的。但它的弱點也是有的,不能透傳(不能被子線程獲取),所以催生了InheritableThreadLocal,甚至更高級的封裝庫。

3. 答

3.1 ThreadLocal的原理?

看過源碼就不難回答。如下圖(這張圖最易懂),ThreadLocal的get和remove方法,只不過是一個使用的快捷方式。它的真正數據,是存在于線程中的一個叫做ThreadLocalMap的結構里。

一個ThreadLocal的值,會根據線程的不同,分散在N個線程中。所以獲取ThreadLocal的Value,有兩個步驟。

  • 第一步,根據線程獲取Map
  • 第二部,根據自身從Map中獲取值,所以它的this就是Map的Key

這沒什么原理。這就是一個為了照顧編碼習慣的數據結構。

3.2 內存泄漏的原因?

嚴格來說,ThreadLocal沒有內存泄漏問題。有的話,那就是你忘記執行remove方法。這是不正確使用引起的。

這和其他一些內存泄漏的問題是一致的,比如:

  • 流沒有關閉
  • 連接沒有斷開
  • 濫用static map

為什么會有泄漏問題?

如果你不調用remove方法的話,ThreadLocal所對應的值,就會存在,一直到當前線程的銷毀。

眾所周知,線程的生命周期都比較長,加上現在普遍使用的線程池,會讓線程的生命更加長。不remove,當然不會釋放。這和Key,到底是不是弱引用,關系不大。

那這種情況,屬不屬于泄漏問題,是一個咬字眼的問題。面試的過程是探討,并不一定要標準的答案。

比起內存泄漏問題,線程池所引起的數據錯亂問題,更加應該引起關心。因為放在ThreadLocal的數據,肯定不會很大,泄漏頂多占用一點內存而已;而數據錯亂,可是會引起業務Bug的。

3.3 InheritableThreadLocal用過嗎?

InheritableThreadLocal在父子線程傳遞值的時候用到過,解決了threadlocal不能在父子線程間傳值的問題。

這個在本質上,還是通過Thread來實現的。通過兩個Map來進行屬性拷貝。

  1. /* ThreadLocal values pertaining to this thread. This map is maintained 
  2.      * by the ThreadLocal class. */ 
  3. ThreadLocal.ThreadLocalMap threadLocals = null
  4.  
  5.     /* 
  6.      * InheritableThreadLocal values pertaining to this thread. This map is 
  7.      * maintained by the InheritableThreadLocal class. 
  8.      */ 
  9. ThreadLocal.ThreadLocalMap inheritableThreadLocals = null

不要高興太早,對于使用線程池的情況,由于會緩存線程,線程是緩存起來反復使用的。這時父子線程關系的上下文傳遞,已經沒有意義。

附加問:你如何解決的?

阿里這里有個庫,https://github.com/alibaba/transmittable-thread-local 專門解決變量跨線程共享。如果你面的阿里,不妨順便舔一把。

3.4 Netty的FastThreadLocal是什么

既然Java中有了ThreadLocal類了,為什么Netty還自己創建了一個叫做FastThreadLocal的結構?

我們首先來看一下ThreadLocal的實現。

Thread類中,有一個成員變量threadLocals,存放了與本線程相關的所有自定義信息。對這個變量的定義在Thread類,而操作卻在ThreadLocal類中。

問題就出在ThreadLocalMap類上,它雖然叫Map,但卻沒有實現Map的接口。如圖,ThreadLocalMap在rehash的時候,并沒有采用類似HashMap的數組+鏈表+紅黑樹的做法,它只使用了一個數組,使用開放尋址(遇到沖突,依次查找,直到空閑位置)的方法,這種方式是非常低效的。

由于Netty對ThreadLocal的使用非常頻繁,Netty對它進行了專項的優化。它之所以快,是因為在底層數據結構上做了文章,使用常量下標對元素進行定位,而不是使用JDK默認的探測性算法。

底層的InternalThreadLocalMap對cacheline也做了相應的優化。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2022-05-14 21:19:22

ThreadLocaJDKsynchroniz

2021-10-26 15:56:57

kafka數據平臺,

2024-03-13 13:56:11

openFeignHttp服務調用

2023-02-26 02:00:36

OpenFeign接口實現類

2021-07-21 09:15:27

MySQL數據庫面試

2025-08-26 02:22:00

2022-04-01 12:40:13

MySQL數據庫

2022-01-24 14:08:16

Redis面試命令

2023-03-08 09:03:55

2023-04-26 09:16:17

2021-07-30 16:16:54

網絡面試TCP

2020-07-28 08:59:22

JavahreadLocal面試

2021-06-04 14:38:12

網絡通信TCP揮手

2021-08-27 14:14:39

ThreadLocal源碼操作

2022-03-25 09:01:36

Spring循環依賴面試

2022-11-04 08:47:52

底層算法數據

2021-11-08 14:10:37

分布式Spring鏈路

2019-05-29 15:17:43

TCPHTTPSSL

2023-11-03 08:10:49

ThreadLoca內存泄露

2024-10-28 08:15:32

點贊
收藏

51CTO技術棧公眾號

久久午夜影院| 欧美黄色视屏| 国产精品社区| 91精品久久久久久久99蜜桃| 色女孩综合网| **国产精品| 欧美精品一区二区三区一线天视频 | 麻豆一区二区在线观看| 国产区在线视频| 狼人天天伊人久久| 久久综合av免费| 4444在线观看| 国产女优一区| 日韩免费精品视频| 日韩精品第二页| 日韩欧美第一区| 黄在线免费观看| 欧美色成人综合| 成人在线观看一区| 色94色欧美sute亚洲线路一久| 91看片在线免费观看| 国产精品入口麻豆九色| 精品日韩久久久| 亚洲精品成人少妇| 涩涩漫画在线观看| 亚洲狼人国产精品| 亚洲一区二区三区精品中文字幕| 亚洲v日本v欧美v久久精品| 中文视频在线| 欧美日韩高清一区二区三区| 手机av在线播放| 日韩一二三在线视频播| 美女扒开腿让男人桶爽久久动漫| 国产成人精品一区二区三区| 精品成人国产| 国产 国语对白 露脸| 欧美激情综合五月色丁香小说| 天堂色在线视频| 欧美午夜影院一区| 亚洲承认视频| 国产高清在线不卡| 日韩精品乱码免费| 女人另类性混交zo| 日韩人体视频一二区| 美女福利一区二区三区| 51久久精品夜色国产麻豆| 综合久久综合| 国产一区视频免费观看| 欧美精品一二三四| 国产精品白丝一区二区三区| 精品免费二区三区三区高中清不卡 | 不卡一区中文字幕| 爱爱免费视频网站| 亚洲精品久久久久久久久久久久 | 欧美日韩精品三区| 欧美成人一区在线观看| 亚洲乱码一区二区三区| 亚洲一区视频在线观看视频| 国产传媒av在线| 91精品视频在线看| 国产精品美女久久久久高潮| 蜜桃在线视频| 欧美亚洲免费高清在线观看| 亚洲一区二区在线播放相泽| 欧美成人家庭影院| 在线看视频不卡| 欧美日韩1234| 51精产品一区一区三区| 日韩av片网站| 欧美精品一区二区三区久久久 | 国产九九精品视频| 欧美高清在线一区二区| jizz欧美| 国产高清av在线播放| 亚洲精品国产美女| 麻豆久久久久久| 97热精品视频官网| 国产精品久久久久影院亚瑟| 91国拍精品国产粉嫩亚洲一区 | 欧美影院一区| 日韩av免费观影| 国产精品7m视频| 国产精品传媒视频| 亚洲人成网www| 中文字幕福利片| 热99精品只有里视频精品| 国产精品色哟哟| 欧美精品羞羞答答| 风间由美一区| 日韩av不卡播放| 日韩电影网在线| 高清久久久久久| 精品国内亚洲2022精品成人| 天天色综合6| 成人黄色影片在线| 欧美一区永久视频免费观看| 免费在线成人网| 99久热在线精品视频观看| 国产视频1区2区3区| 91亚洲精品久久久| 精品视频—区二区三区免费| 一区二区久久久久| 亚洲欧洲美洲av| 久久久久成人网| 91在线国产观看| 日韩一级二级| 三级网站在线| www.国产精品.com| 77777影视视频在线观看| 久久久久久久久久久视频| 日日骚久久av| 精品一区二区三区四区| 亚洲色图狂野欧美| 久久无码高潮喷水| 日本一区免费在线观看| 久久综合国产精品台湾中文娱乐网| 中文视频在线| 精品国产乱码一区二区三区四区| 综合久久国产九一剧情麻豆| 免费看日本毛片| 欧美性大战久久久| 亚洲精品承认| 欧美激情综合亚洲一二区| 亚洲一区二区免费在线观看| 91久久极品少妇xxxxⅹ软件| 日本一区二区不卡| 精品一区亚洲| 一区二区电影免费观看| aa在线观看视频| 日本在线观看大片免费视频| 日韩免费观看av| 久久精品一区四区| 日韩欧乱色一区二区三区在线 | 国产欧美精品va在线观看| 99久久久精品| 精品亚洲a∨| 日韩精品一区二区三区老鸭窝| 成人短片线上看| 好吊的妞视频这里都有| 欧美激情小视频| 2021中文字幕一区亚洲| 中文成人在线| 日日碰狠狠躁久久躁婷婷| 欧美理论片在线观看| 中文字幕久久午夜不卡| 精品综合久久88少妇激情| 最近中文字幕一区二区| 欧美丰满少妇xxxx| 国产精品久久看| 色喇叭免费久久综合网| 国产在线观看免费| 久久99精品久久久水蜜桃| 欧美videofree性高清杂交| 久久成人久久鬼色| 欧美大片网站| 黄色资源在线看| 成人精品水蜜桃| 久久国产一区| 日韩一级黄色av| 777精品伊人久久久久大香线蕉| 亚洲综合激情另类小说区| 日本精品一级二级| 色噜噜狠狠狠综合曰曰曰88av| 亚洲开发第一视频在线播放| 亚洲女色av| 色橹橹欧美在线观看视频高清 | 555夜色666亚洲国产免| 国产精品成人v| 黄色成人免费看| 国产人成在线观看| 亚洲国产中文在线二区三区免| 99久久婷婷国产| 91黄色8090| 亚洲国产日韩欧美| 亚洲精品影片| 亚洲成va人在线观看| 亚洲美女久久久| 欧美精品尤物在线| 亚洲人免费短视频| 国产精品久久久久久久久久10秀| 麻豆精品国产传媒mv男同 | 欧美激情亚洲天堂| 97人澡人人添人人爽欧美| 免费国产亚洲视频| 精品久久久久香蕉网| avove在线观看| 青青久久aⅴ北条麻妃| 欧美特黄色片| 亚洲精品社区| 一区二区三区中文在线| 久久在线观看视频| 91丝袜脚交足在线播放| 亚洲美女欧洲| 影音先锋国产精品| 中文字幕亚洲综合| 国产成人亚洲精品无码h在线| 另类小说第一页| 91黄页在线观看| 特黄特色欧美大片| 99国产一区二区三精品乱码|