世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
大家有没有为ThreadLocal写过全局工具类呢,第一句是不是这样 :
private static final ThreadLocal<Object> THREAD_LOCAL = new ThreadLocal<>();
那我告诉大家,这个一定要慎用,除非你只记录一个值,只使用一次,否则别用。
为什么呢?
其实大家都知道,ThreadLocal是以当前线程为键的Map的形式存储数据的,如果当前线程有两个数据你都使用ThreadLocal存储,那会出现什么情况呢?
根据Map的特点,前一个值肯定会被后一个值覆盖,那么取值时你取到的只能是最后set进去的值。
所以千万不要用这种方式实现ThreadLocal工具类,如果非要实现这么一个工具类,建议使用享元模式。