threadlocal.java

来自「有关java学习技巧的课件」· Java 代码 · 共 35 行

JAVA
35
字号
package onlyfun.caterpillar;

import java.util.*;

public class ThreadLocal<T> {
    // 取得一个同步化的Map对象
    private Map<Thread, T> storage = 
             Collections.synchronizedMap(new HashMap<Thread, T>());

    public T get() {
        // 取得目前执行get()方法的线程
        Thread current = Thread.currentThread();
        // 根据线程取得线程自有的资源
        T t = storage.get(current);

        // 如果还没有线程专用的资源空间
        // 则建立一个新的空间

        if(t == null && 
           !storage.containsKey(current)) {
            t = initialValue();
            storage.put(current, t);
        }

        return t;
    }

    public void set(T t) {
        storage.put(Thread.currentThread(), t);
    }

    public T initialValue() {
        return null;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?