java中ThreadLocal的應用場景分析
本教程操作環境:windows7系統、java10版,DELL G3電腦。
1、各種框架中的應用
Spring框架的事務管理中使用ThreadLocal來管理連線,每個執行緒是單獨的連線,當事務失敗時不能影響到其他執行緒的事務過程或結果,還有大家耳聞目睹的ORM框架、Mybatis也是用ThreadLocal管理,SqlSession也是如此。
//Spring TransactionSynchronizationManager類 @Override protected void doBegin(Object transaction, TransactionDefinition definition) { DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction; Connection con = null; try { //此處省略N行程式碼 if (txObject.isNewConnectionHolder()) { //繫結資料庫連線到執行緒中 TransactionSynchronizationManager.bindResource(obtainDataSource(), txObject.getConnectionHolder()); } } catch (Throwable ex) { if (txObject.isNewConnectionHolder()) { //當發生異常時,移除執行緒中的連線 DataSourceUtils.releaseConnection(con, obtainDataSource()); txObject.setConnectionHolder(null, false); } throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex); } }
2、防止記憶體洩漏
通常我們是使用如下的方式操作ThreadLocal,在使用完threadlocal後一定要remove掉,防止記憶體洩露。
private static final ThreadLocal<LoginUser> loginUserLocal = new ThreadLocal<LoginUser>(); public static LoginUser getLoginUser() { return loginUserLocal.get(); } public static void setLoginUser(LoginUser loginUser) { loginUserLocal.set(loginUser); } public static void clear() { loginUserLocal.remove(); } //在使用完後一定要清理防止記憶體洩露 try{ loginUserLocal.set(loginUser); //執行其他業務邏輯 }finally{ loginUserLocal.remove(); }
以上就是java中ThreadLocal的應用場景分析,大家在瞭解了這種變數的作用後,可以就這些使用場景,逐個進行嘗試。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2830780/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ThreadLocal的使用場景分析thread
- ThreadLocal 原理和使用場景分析thread
- 商品API的應用場景分析API
- 細粒度情感分析在到餐場景中的應用
- 面試中的 ThreadLocal 原理和使用場景面試thread
- ThreadLocal應用及原始碼分析thread原始碼
- Java程式中的代理作用和應用場景及實現Java
- ThreadLocal概念以及使用場景thread
- [譯] Java 資料流的不同應用場景Java
- JavaScript中this的一些應用場景JavaScript
- Numpy的應用場景
- FRAM的應用場景
- HTAP資料庫及應用場景分析資料庫
- 文字挖掘和文字分析的九大應用場景
- redis的場景應用多角度簡單分析Redis
- Java動態代理—框架中的應用場景和基本原理Java框架
- Java動態代理——框架中的應用場景和基本原理Java框架
- Java Executors類的9種建立執行緒池的方法及應用場景分析Java執行緒
- SAP BTP MTA 應用的應用場景
- React 中的高階元件及其應用場景React元件
- mapboxgl 中插值表示式的應用場景
- TypeScript 中裝飾器的理解?應用場景?TypeScript
- ClickHouse在自助行為分析場景的實踐應用
- Mybatis-Plus的應用場景及注入SQL原理分析MyBatisSQL
- 棧的應用場景思路分析和程式碼實現
- 使用者畫像分析與場景應用
- 理解 Fragment 的應用場景Fragment
- LINQ SelectMany的應用場景
- 3.4 應用場景
- DDD應用場景
- ES 應用場景
- snapshot應用場景
- Zookeeper應用場景
- Java併發——ThreadLocal分析Javathread
- TypeScript 中列舉型別的理解?應用場景?TypeScript型別
- 美暢影片接入閘道器(VGate)的應用場景分析
- SKYLAB:藍芽閘道器應用場景案例分析藍芽
- BFC的概念與應用場景