ThreadLocalT
生活随笔
收集整理的這篇文章主要介紹了
ThreadLocalT
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖解:
說明:在我們Thread 的類里面,存在一個屬性,這個屬性是:ThreadLocal類實現的內部類(ThreadLocalMap),所以對于每一個線程來說,他都具有一個本地的map,保存屬于自己的參數,
對于回收,ThreadLocalMap的實現使用了弱引用,
static class Entry extends WeakReference<ThreadLocal<?>> {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal<?> k, Object v) {super(k);value = v;}}
另外注意使用規范:
private static final ThreadLocal<List<Runnable>> RUNNABLES = new ThreadLocal<List<Runnable>>();private ExecutorService threadPool = Executors.newFixedThreadPool(20);@Overridepublic void execute(Runnable runnable) {List<Runnable> threadRunnables = RUNNABLES.get();if (threadRunnables == null) {threadRunnables = new ArrayList<Runnable>();RUNNABLES.set(threadRunnables);TransactionSynchronizationManager.registerSynchronization(this);}threadRunnables.add(runnable);}TheadLocal的添加,是通過用戶自己先判斷,get(),是否為null,如果為空,set一個new值
?
java.lang.ThreadLocal<T>實現
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); }public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) return (T)e.value; } return setInitialValue(); }
private T setInitialValue() { T value = initialValue(); Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); return value; }
?
與java.lang.Thread ?implements Runnable (){。。。}的關聯
此類的變量中存在
ThreadLocal.ThreadLocalMap threadLocals = null;
轉載于:https://www.cnblogs.com/sg9527/p/7692652.html
總結
以上是生活随笔為你收集整理的ThreadLocalT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python rjust() 方法
- 下一篇: zabbix概述篇