深入剖析ThreadLocal實現原理以及內存泄漏問題

關于ThreadLocalMap<ThreadLocal,?Object>弱引用問題:

當線程沒有結束,但是ThreadLocal已經被回收,則可能導致線程中存在ThreadLocalMap<null,?Object>的鍵值對,造成內存泄露。(ThreadLocal被回收,ThreadLocal關聯的線程共享變量還存在)。

雖然ThreadLocal的get,set方法可以清除ThreadLocalMap中key為null的value,但是get,set方法在內存泄露后并不會必然調用,所以為了防止此類情況的出現,我們有兩種手段。

1、使用完線程共享變量后,顯示調用ThreadLocalMap.remove方法清除線程共享變量;

2、JDK建議ThreadLocal定義為private static,這樣ThreadLocal的弱引用問題則不存在了。

?

最常見的ThreadLocal使用場景為 用來解決 數據庫連接、Session管理等。

private static ThreadLocal<Connection> connectionHolder= new ThreadLocal<Connection>() {public Connection initialValue() {return DriverManager.getConnection(DB_URL);}};public static Connection getConnection() {return connectionHolder.get();
}
private static final ThreadLocal threadSession = new ThreadLocal();public static Session getSession() throws InfrastructureException {Session s = (Session) threadSession.get();try {if (s == null) {s = getSessionFactory().openSession();threadSession.set(s);}} catch (HibernateException ex) {throw new InfrastructureException(ex);}return s;
}

?

?

http://blog.csdn.net/lhqj1992/article/details/52451136

http://www.cnblogs.com/onlywujun/p/3524675.html

?

https://www.cnblogs.com/coshaho/p/5127135.html

http://www.cnblogs.com/dolphin0520/p/3920407.html

?

轉載于:https://www.cnblogs.com/genggeng/p/7477191.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454775.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解讀《普通大學應屆畢業生如何成功應聘微軟》

《普通大學應屆畢業生如何成功應聘微軟》這篇文章很有實踐性&#xff0c;我所要提的&#xff0c;是最后一道面試&#xff0c;也就是唐駿本人對作者的面試&#xff0c;這一輪看似平常的面試大有門道。仔細想想&#xff0c;為什么這些問題由唐駿本人來問&#xff0c;他為什么要這…

grep 命令的 12 個實例

2019獨角獸企業重金招聘Python工程師標準>>> 你是否遇到過需要在文件中查找一個特定的字符串或者樣式&#xff0c;但是不知道從哪兒開始&#xff1f;那么,就請grep來幫你吧。 grep是每個Linux發行版都預裝的一個強有力的文件模式搜索工具。無論何種原因&#xff0c;…

php 怎么從memcache緩存數據中統計某一字段總數,php和memcache統計在線人數的方法...

$mc new Memcache ();// 連接memcache$mc->connect("127.0.0.1", 11211);// 獲取 在線用戶 IP 和 在線時間數據$online_members $mc->get(online_members);// 如果為空&#xff0c;初始化數據if (!$online_members) {$online_members array();}// 獲取用戶i…

ubuntu之ufw防火墻

UFW是Ubuntu下的一個主機端的iptables類防火墻配置工具(底層調用iptables來處理)。這個工具的目的是提供給用戶一個可以輕松駕馭的界面&#xff0c;就像包集成和動態檢測開放的端口一樣。雖然功能較簡單&#xff0c;但對桌面型應用來說比較實用&#xff0c;基本常用功能都有&am…

background-size在IE8不兼容問題

background-size在IE8及以下瀏覽器不兼容&#xff1b;要解決的話要用濾鏡&#xff1a; filter: progid: DXImageTransform.Microsoft.AlphaImageLoader( src, sizingMethodscale); 注意&#xff1a;此處src的路徑必須是絕對路徑&#xff0c;相對路徑不可以&#xff01; 當寫完…

程序員 大牛 面試

水 滴 石 穿 -- 找工作記 -- yurking&#xff08;yurkinggmail.com&#xff09; 一日一錢&#xff0c;千日千錢&#xff0c;繩鋸木斷&#xff0c;水滴石穿! 這個東西寫出來有一段時間了&#xff0c;但是一直沒發&#xff0c;想著等有時間了再好好的看一看&#xff0c;改一…

Linux : shell基礎(慕課網Linux達人養成計劃課程筆記)

Shell概述 shell是Linux中的命令行解釋器&#xff0c;為用戶提供了一個向Linux內核發送請求一邊運行程序的界面系統級程序&#xff0c;用戶可以用shell來啟動、掛起、停止甚至編寫一些程序。shell還是一個功能相當強大的編程語言&#xff0c;易編寫&#xff0c;易調試&#xff…

基于matlab的大米,大米顆數計算MATLAB軟件

應用背景大米是人類的主食之一&#xff0c;是稻谷經清理、礱谷、碾米、成品整理等工序后制成的成品。人們購買米大多采用直接稱量的方法&#xff0c;市面上也有許多儀器采用光電傳感器等方式用于生產加工時米粒的計數。然而這樣的方法都比較依賴于設備&#xff0c;不方便人們日…

ubuntu17.04之apt-get源

不要問我這么簡單的也要寫&#xff0c;我只想說在網上百度了一堆源&#xff0c;在筆者這里只有一個能用&#xff0c;悲傷的表情&#xff0c;還是記錄一下吧 這個是清華的apt-get源&#xff0c;適用于ubuntu17.04apt-get源文件目錄 /etc/apt/sources.list &#xff0c;記得先備份…

HttpClient通過Post方式發送Json數據

服務器用的是Springmvc&#xff0c;接口內容&#xff1a; [java] view plaincopy print?ResponseBody RequestMapping(value"/order",methodRequestMethod.POST) public boolean order(HttpServletRequest request,RequestBody List<Order> orders) throws …

openssl、ssh

PKI&#xff1a;公鑰基礎設施&#xff0c;保證服務器向客戶端發送的證書的可靠性&#xff1b;簽證機構&#xff1a;CA注冊機構&#xff1a;RA證書吊銷列表&#xff1a;CRL證書存取庫&#xff1a;CAB威瑞信——verisignGlobalSign賽門鐵克AsiaCOM國際標準化組織定義了證書的標準…

php圖型分析插件,IMAGE縮略圖插件

應用信息 名稱: IMAGE縮略圖插件 售價: (免費) 應用ID: IMAGE 最低要求: Z-BlogPHP 1.5.1 Zero Build 151740版 本: 2 發布日期: 2014-08-27PHP最低版本要求: 5.3 更新日期: 2018-05-21立即購買 加入購物車作者信息 開發者ID: 十五樓的鳥兒 本站用戶組: 管理員 聯系郵箱: adm…

職業生涯步步高

在擔任公司高管的幾年間&#xff0c;我面試過數以百計的各個層面的員工&#xff0c;其中最讓我感到遺憾的一個現象就是很多人有著非常好的素質&#xff0c;甚至有的還是名校的畢業生&#xff0c;因為不懂得去規劃自己的職業&#xff0c;在工作多年后&#xff0c;依然拿著微薄的…

httpd2.2配置文件詳解

一丶Apache常用目錄詳解1) /etc/httpd/conf/httpd.confhttpd.conf是Apache的主配文件&#xff0c;整個Apache也不過就是這個配置文件&#xff0c;里面幾乎包含了所有的配置。有的distribution都將這個文件拆分成數個小文件分別管理不同的參數。但是主要配置文件還是以這個文件為…

2017.9.5 postgresql加密函數的使用

需要安裝的插件的名字&#xff1a;pgcrypto官網地址&#xff1a;https://www.postgresql.org/docs/9.4/static/pgcrypto.htmlstackoverflow:https://stackoverflow.com/questions/8000740/how-do-i-install-pgcrypto-in-postgresql-9-1-on-windows/46046367#46046367https://st…

php 序列化方法,PHP序列化操作方法分析

本文實例講述了PHP序列化操作方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;序列化就是將變量數據轉換為字符串(跟類型轉換機制不同)&#xff0c;一般應用于存儲數據(文件)&#xff0c;然后在別的情形下恢復(反序列化)序列化&#xff1a;$val serialize($var);f…

Redis入門到精通-Redis數據類型

2019獨角獸企業重金招聘Python工程師標準>>> 登錄Redis數據庫 [rootlocalhost bin]# /usr/local/redis/bin/redis-cli String類型 ? String 數據結構是簡單的key-value類型&#xff0c;value其實不僅是String&#xff0c;也可以是數字&#xff0c;是包含很多種類型…

裝機之 BIOS、EFI與UEFI詳解

在我們的電腦中&#xff0c;都有一塊黑色的小芯片。但是請千萬不要小看它&#xff0c;如果它損壞或者數據錯誤亂套的話&#xff0c;恭喜&#xff0c;如果不會“救回”這個小芯片&#xff0c;那么這臺電腦可以掛閑魚賣零件了…… 這個小芯片是什么呢&#xff1f;對&#xff0c;…

c/c++筆試題

微軟亞洲技術中心的面試題&#xff01;&#xff01;&#xff01; 1&#xff0e;進程和線程的差別。 線程是指進程內的一個執行單元,也是進程內的可調度實體. 與進程的區別: (1)調度&#xff1a;線程作為調度和分配的基本單位&#xff0c;進程作為擁有資源的基本單位 (2)并發性&…

php 模板 php + mysql + myodbc,連接MySQL數據庫在ASP中,就用MyODBC

我們大家都知道ASP與MySQL連接現在應用最為廣泛的兩種辦法是&#xff0c;一是使用組件&#xff0c;經常使用的是MySQL(和PHP搭配之最佳組合)X&#xff0c;可惜價格很貴。另一個就是用MyODBC來連接MySQL數據庫&#xff0c;下面我們就來看看第二種方式。 試驗的平臺&#xff1a; …