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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ThreadLocal应用-使用ThreadLocal做线程缓存变量池

發布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThreadLocal应用-使用ThreadLocal做线程缓存变量池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多線程環境下,或者web環境下,可以使用ThreadLocal做變量池用

import java.util.HashMap; import java.util.Map;public abstract class AbstractThreadContext {public AbstractThreadContext() {}abstract ThreadLocal<Map<String, Object>> getThreadContext();public void set(final String key, final Object value) {ThreadLocal<Map<String, Object>> threadContext = this.getThreadContext();Map<String, Object> map = (Map)threadContext.get();if (map == null) {map = new HashMap();}((Map)map).put(key, value);threadContext.set(map);}public void removeKey(String key) {ThreadLocal<Map<String, Object>> threadContext = this.getThreadContext();Map<String, Object> map = (Map)threadContext.get();if (map == null) {map = new HashMap();}((Map)map).remove(key);threadContext.set(map);}public Object get(String key) {ThreadLocal<Map<String, Object>> threadContext = this.getThreadContext();Map<String, Object> map = (Map)threadContext.get();return map == null ? null : map.get(key);}public void clean() {ThreadLocal<Map<String, Object>> threadContext = this.getThreadContext();Map<String, Object> map = (Map)threadContext.get();if (map != null) {map.clear();threadContext.set(map);}} } import java.util.Map;public final class ThreadContextStoreUtil extends AbstractThreadContext {private static ThreadLocal<Map<String, Object>> threadContext = new ThreadLocal();private static volatile ThreadContextStoreUtil app = null;private ThreadContextStoreUtil() {}public static synchronized ThreadContextStoreUtil getInstance() {if (app == null) {Class var0 = ThreadContextStoreUtil.class;synchronized(ThreadContextStoreUtil.class) {if (app == null) {app = new ThreadContextStoreUtil();}}}return app;}@Overrideprotected ThreadLocal<Map<String, Object>> getThreadContext() {return threadContext;} } public class ThreadMain {public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {ThreadContextStoreUtil.getInstance().set("1", "1");ThreadContextStoreUtil.getInstance().set("2", "11");ThreadContextStoreUtil.getInstance().set("3", "111");System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("1"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("2"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("3"));}}, "a").start();new Thread(new Runnable() {@Overridepublic void run() {ThreadContextStoreUtil.getInstance().set("1", "2");ThreadContextStoreUtil.getInstance().set("2", "22");ThreadContextStoreUtil.getInstance().set("3", "222");System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("1"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("2"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("3"));}}, "b").start();new Thread(new Runnable() {@Overridepublic void run() {ThreadContextStoreUtil.getInstance().set("1", "3");ThreadContextStoreUtil.getInstance().set("2", "33");ThreadContextStoreUtil.getInstance().set("3", "333");System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("1"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("2"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("3"));}}, "c").start();new Thread(new Runnable() {@Overridepublic void run() {ThreadContextStoreUtil.getInstance().set("1", "4");ThreadContextStoreUtil.getInstance().set("2", "44");ThreadContextStoreUtil.getInstance().set("3", "444");System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("1"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("2"));System.out.println(Thread.currentThread().getName() + ThreadContextStoreUtil.getInstance().get("3"));}}, "d").start();} }

總結

以上是生活随笔為你收集整理的ThreadLocal应用-使用ThreadLocal做线程缓存变量池的全部內容,希望文章能夠幫你解決所遇到的問題。

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