电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java并發編程之ThreadLocal詳解

瀏覽:120日期:2022-08-11 10:59:39
目錄一、什么是ThreadLocal?二、ThreadLocal的使用場景三、如何使用ThreadLocal四、數據庫連接時的使用五、ThreadLocal工作原理六、小結七、注意點一、什么是ThreadLocal?

ThreadLocal叫做線程本地變量,ThreadLocal中填充的變量屬于當前線程,該變量對其他線程而言是隔離的。ThreadLocal為變量在每個線程中都創建了一個副本,則每個線程都可以訪問自己內部的副本變量。

二、ThreadLocal的使用場景

1.當對象進行跨層傳遞的時候,使用ThreadLocal可以避免多層傳遞,打破層次間的約束。

2.線程間數據隔離。

3.進行事務操作,用于存儲線程事務信息。

4.數據庫連接,Session會話管理。

三、如何使用ThreadLocal

ThreadLocal的作用是每一個線程創建一個副本。

Java并發編程之ThreadLocal詳解

從以上實例中可以看出,每一個線程都有自己的local值,設置一個休眠時間就是為了另外一個線程也能夠及時的讀取當前的local值。

四、數據庫連接時的使用

Java并發編程之ThreadLocal詳解

上面是一個數據庫連接的管理類,使用數據庫的時候首先就是建立數據庫連接,然后用完之后進行關閉,這里存在一個問題:如果1個客戶端頻繁的使用數據庫,那么就需要建立多次連接和關閉,這樣服務器可能會吃不消,如果有一萬個客戶端,服務器的壓力更大。這個時候就可以使用ThreadLocal,他會在每個線程中對連接創建一個副本,且在線程內部任何地方都可以使用,線程之間互不影響,這樣一來就不存在線程安全問題,也不會嚴重影響程序執行性能。

五、ThreadLocal工作原理

ThreadLocal中的主要方法:

Java并發編程之ThreadLocal詳解

set方法

Java并發編程之ThreadLocal詳解

首先獲取到當前線程t,然后調用getMap獲取ThreadLocalMap,如果map存在,則將當前線程對象作為key,要存儲的對象作為value存到map中去,如果該map不存在,則初始化一個。ThreadLocalMap:

Java并發編程之ThreadLocal詳解

ThreadLocalMap就是ThreadLocal的一個靜態內部類,里面定義了一個Entry來保存數據,而且還是繼承的弱引用。在Entry內部使用了ThreadLocal作為key,使用我們設置的value作為value。getMap方法:

ThreadLocalMap getMap(Thread t) { return t.threadLocals;}

調用當前線程t,返回當前線程t中的成員變量threadLocals,threadLocals就是ThreadLocalMap。

get()方法

Java并發編程之ThreadLocal詳解

首先獲取當前線程,然后調用getMap方法獲取一個ThreadLocalMap,如果map不為null,那就使用當前線程作為ThreadLocalMap的Entry的鍵,然后值就作為相應的值,如果沒有就設置一個初始值。設置初始值:

Java并發編程之ThreadLocal詳解

remove()方法

Java并發編程之ThreadLocal詳解

從map中移除即可。

六、小結

1.每個Thread內部都維護著一個ThreadLocalMap的引用

2.ThreadLocalMap是ThreadLocal的內部類,用Entry來進行存儲

3.ThreadLocal創建的副本是存儲在自己的threadLocals中的,也就是自己的ThreadLocalMap

4.ThreadLocalMap的鍵值為ThreadLocal對象,而且可以有多個threadLocals變量,因此保存在map中。

5.在進行get之前,必須先set,否則會報空指針異常,當然也可以初始化一個,但是必須重寫initialValue()方法。

6.ThreadLocal本身并不存儲值,他只是作為一個key來讓線程從ThreadLocalMap獲取value。

七、注意點

Java并發編程之ThreadLocal詳解

1.Thread中有一個map,就是ThreadLocalMap

2.ThreadLocalMap的key是ThreadLocal,值是我們自己設定的。

3.ThreadLocal是一個弱引用,當為null時,會被當成垃圾回收。

4.如果我們ThreadLocal是null了,也就是要被垃圾回收器回收了,但是此時我們的ThreadLocalMap生命周期和Thread的一樣,他不會回收,這時候就出現一個現象,就是ThreadLocalMap的key沒有了,但是value還在,這就造成了內存泄漏。解決辦法:使用完ThreadLocal后,執行remove操作,避免出現內存溢出情況。

到此這篇關于Java并發編程之ThreadLocal詳解的文章就介紹到這了,更多相關Java ThreadLocal內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 猎头招聘_深圳猎头公司_知名猎头公司 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 在线悬浮物浓度计-多参数水质在线检测仪-上海沃懋仪表科技有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 防锈油-助焊剂-光学玻璃清洗剂-贝塔防锈油生产厂家 |