日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ThreadLocal管理Connection

發布時間:2024/1/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThreadLocal管理Connection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ThreadLocal管理Connection

每一個用戶都對應有一個單獨線程,每一個線程都有一個數據庫連接對象Connection對象接待它.

一個用戶對應一個線程,這個線程中的Connection對象或者數據庫連接對象是唯一的,且只能有一個.

怎么去獲得這個數據庫連接對象?(看下面的代碼)

?

ThreadLocal還可以管理Hibernate中的session對象,還可以管理Struts2中的dispatherFileter和Spring中的東西.

?

每個線程都有一個獨立的副本,這樣會存在一個小問題.

如果線程特別多,對象特別大的話.這個時候會造成內存占用的比較大,內存泄露的問題.(這是一個非常嚴重的問題)

ThreadLocal 用于每一個線程都有一個對象的副本。“以空間換時間”

?

給了解決方案:

源碼中繼承了一個WeakReference類,弱引用.通過這個類解決了可能造成的內存泄露的問題.

一般的類,如果不繼承WeakReference這個類,都是強引用的.

強引用比如說: String str = "xxx";? str被xxx引用著,如果引用不消失.

即使這個引用沒有工作了,他們就一直會占用著內存.垃圾回收無法把他們回收掉.

如果是弱引用的,即使它飲用著,如果它不工作了...垃圾回收照樣會把它們回收.

這就是ThreadLocal的解決內存泄露的問題.

但是仍然建議你使用ThreadLocal類中的remove()方法手動的移除掉.

?

2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 8 /* 9 * 通過ThreadLocal來管理Connection對象. 10 * ThreadLocal還可以管理Hibernate中的session對象,還可以管理Struts2中的dispatherFileter和Spring中的東西. 11 * ThreadLocal 用于每一個線程都有一個對象的副本。“以空間換時間” 12 * 內存泄漏?-->弱引用:WeakReference 13 * String str = "xxx"; 14 * 15 */ 16 17 public class ConnectionManager { 18 private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); 19 20 private ConnectionManager(){} 21 22 public static Connection getInstance(){ 23 try { 24 Connection conn = threadLocal.get(); 25 if(conn == null){ 26 conn = DriverManager.getConnection("");//獲取數據庫連接對象 27 threadLocal.set(conn); 28 } 29 return conn; 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 } 33 return null; 34 } 35 36 }

?

總結

以上是生活随笔為你收集整理的ThreadLocal管理Connection的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。