今天就跟大家聊聊有關(guān)java中ThreadLocal的使用場景有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
公司主營業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出德惠免費(fèi)做網(wǎng)站回饋大家。
1.SpringMVC,Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請求驅(qū)動(dòng)類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個(gè)安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個(gè)分布式服務(wù)框架。5.Maven,Maven是個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具。6.RabbitMQ,RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器。7.Ehcache,EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架。
1、各種框架中的應(yīng)用
Spring框架的事務(wù)管理中使用ThreadLocal來管理連接,每個(gè)線程是單獨(dú)的連接,當(dāng)事務(wù)失敗時(shí)不能影響到其他線程的事務(wù)過程或結(jié)果,還有大家耳聞目睹的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()) { //綁定數(shù)據(jù)庫連接到線程中 TransactionSynchronizationManager.bindResource(obtainDataSource(), txObject.getConnectionHolder()); } } catch (Throwable ex) { if (txObject.isNewConnectionHolder()) { //當(dāng)發(fā)生異常時(shí),移除線程中的連接 DataSourceUtils.releaseConnection(con, obtainDataSource()); txObject.setConnectionHolder(null, false); } throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex); } }
2、防止內(nèi)存泄漏
通常我們是使用如下的方式操作ThreadLocal,在使用完threadlocal后一定要remove掉,防止內(nèi)存泄露。
private static final ThreadLocalloginUserLocal = new ThreadLocal (); public static LoginUser getLoginUser() { return loginUserLocal.get(); } public static void setLoginUser(LoginUser loginUser) { loginUserLocal.set(loginUser); } public static void clear() { loginUserLocal.remove(); } //在使用完后一定要清理防止內(nèi)存泄露 try{ loginUserLocal.set(loginUser); //執(zhí)行其他業(yè)務(wù)邏輯 }finally{ loginUserLocal.remove(); }
看完上述內(nèi)容,你們對java中ThreadLocal的使用場景有哪些有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。