本文主要是介绍从设计者的角度理解ThreadLocal,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:本文为 罗周杨 stupidme.me.lzy@gmail.com 原创,未经授权不得转载。
本文将从设计者的角度着手解析ThreadLocal。如果你是设计者,你会怎么设计?
需求
我们看到的代码都是某种需求的产物。假设有这样一个需求: 我有一些数据,我希望每一个线程都可以访问它,并且更新之后,不影响其他线程的值,也就是说,每一个线程对该数据都可以自由读写,线程之间互不干扰。
如果是你,你会怎么设计呢?
大致有两个思路。第一种,将这些线程和数据组成的关系对,存放在一个公共的区域,各个线程都可以自由获取,并且通过某些手段保证数据在线程之间互不影响。第二种,每个线程创建一个成员变量来保存这个关系对。
首先想到的HashMap
我们首先来看看第一种方式。
你一定知道HashMap,它对每一个键,都可以存储对应的一个值,并且根据不同的键,可以获取到对应的值。HashMap是不是符合我们的需求呢?
是的,看起来完全符合。但是,这里面有一点小小的区别。因为我们要区分的是不同的线程,而不是不同的键。那我把线程当成键不就行了?那么我们试试看。
给我们实现需求的代码起一个名字吧,就叫做ThreadLocal。按照目前的逻辑,代码大概长成这样:
public class ThreadLocal {private Map<Thread, Object> mMap = new HashMap<>();public void set(Object o) {mMap.put(Thread.currentThread(), o);}public Object get() {return mMap.get(Thread.currentThread());}public void remove() {mMap.remove(Thread.currentThread());}
}
额,干脆改成泛型吧:
public class ThreadLocal<T> {private
这篇关于从设计者的角度理解ThreadLocal的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!