Java單線程ThreadLocal串值問題解決方案
ThreadLocal
ThreadLocal 適用于變量在線程間隔離,而在方法或類間共享的場景。
代碼
@RestController public class ThreadLocalController { private static final ThreadLocal<String> currentUid = ThreadLocal.withInitial(() -> null); @GetMapping("bad") public Map doBad(@RequestParam("uid") String uid) { String before = currentUid.get(); currentUid.set(uid); String after = currentUid.get(); Map result = new HashMap(); result.put("before", before); result.put("after", after); return result; } }
在application中做一下tomcat的配置
server.tomcat.max-threads=1
運行結果第一次
第二次
按理說before總是null才對,為什么第二次運行卻讀取到了第一次的值呢?
只是因為我們的tocat會開啟一個線程來調(diào)用我們的程序,而tomcat本身是有線程池的,會出現(xiàn)線程復用的情況。所以導致了問題。
修復
@RestController public class ThreadLocalController { private static final ThreadLocal<String> currentUid = ThreadLocal.withInitial(() -> null); @GetMapping("good") public Map doGood(@RequestParam("uid") String uid) { try { String before = currentUid.get(); currentUid.set(uid); String after = currentUid.get(); Map result = new HashMap(); result.put("before", before); result.put("after", after); return result; } finally { currentUid.remove(); } } }
Key
tomcat線程池。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Java ThreadLocal有什么作用你知道嗎
- Java ThreadLocal原理解析以及應用場景分析案例詳解
- java并發(fā)編程之ThreadLocal詳解
- java中ThreadLocal的基本原理
- 面試官:java ThreadLocal真的會造成內(nèi)存泄露嗎
- 詳解Java中的ThreadLocal
- Java中的ThreadLocal功能演示示例
- Java中ThreadLocal的一些理解
- java中ThreadLocal取不到值的兩種原因
- java中ThreadLocalRandom的使用詳解
- JAVA開發(fā)常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實例詳解
- Java中的ThreadLocal詳解
相關文章
java的Array,List和byte[],String相互轉換的方法你了解嘛
這篇文章主要為大家詳細介紹了java的Array,List和byte[],String相互轉換的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02Java實現(xiàn)等待所有子線程結束后再執(zhí)行一段代碼的方法
這篇文章主要介紹了Java實現(xiàn)等待所有子線程結束后再執(zhí)行一段代碼的方法,涉及java多線程的線程等待與執(zhí)行等相關操作技巧,需要的朋友可以參考下2017-08-08Java替換中使用正則表達式實現(xiàn)中間模糊匹配的方法
今天小編就為大家分享一篇Java替換中使用正則表達式實現(xiàn)中間模糊匹配的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07mybatis if test 不為空字符串或null的解決
這篇文章主要介紹了mybatis if test 不為空字符串或null的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11