首页 > 编程语言 > 详细

java#ThradLocal

时间:2020-03-21 10:10:37      阅读:40      评论:0      收藏:0      [点我收藏+]

 

如果认为自己掌握了ThreadLocal,就自己实现一个ThreadLocal验证一下吧。

 

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * Thread Local 顾名思义,线程局部的,也就是说属于线程自己的。
 * 通过山寨一个Thread Local来检验自己是不是真的理解了Thread Local.
 * 
 * 每一个线程都有自己的存储空间,那么需要的就是一个map,
 * 以当前线程为key,以要存储的值为value.
 * 
 * 
 */
public class MyThreadLocal<T> {

    private Map<Thread, T> holder = Collections.synchronizedMap(new HashMap<>());

    public void set(T value) {
        holder.put(Thread.currentThread(), value);
    }

    public T get() {
        // do not return directly,the value may be null
        Thread key = Thread.currentThread();
        T value = holder.get(key);
        if (value == null && !holder.containsKey(key)) {
            holder.put(key, initialValue());
        }
        return holder.get(key);
    }

    /**
     * It‘s good for GC
     */
    public void remove() {
        holder.remove(Thread.currentThread());
    }

    /**
     * protected imply method should be override
     *
     * @return
     */
    protected T initialValue() {
        return null;
    }
}

 

java#ThradLocal

原文:https://www.cnblogs.com/luohaonan/p/12536555.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!