ThreadLocal 是一种解决多线程安全的一种解决方案
传统的多线程访问,对于一个对象是非线程安全的,在多线程的环境中,一般都是采用synchronized进行线程同步的,从而达到线程安全的。
但是传统方式的采用同步方式,无非会造成降低系统的并发性,从而降低系统性能缺点。
ThreadLocal采用的方式是为每一个线程创建一个变量的副本,从而各个线程间拥有自己的变量副本,进而对自己的变量副本操作不会影响到其他的线程。
一般使用ThreadLocal都会做如下处理:
1、创建一个ThreadLocal的对象,1.5以后支持泛型操作
private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>()
2、将Integer型的对象set到ThreadLocal 对象中
seqNum.set(int);
3、取出int
seqNum.get();
看了一遍文章关于ThreadLocal的实现:
public class SimpleThreadLocal {
private Map valueMap = Collections.synchronizedMap(new HashMap());
public void set(Object newValue) {
//①键为线程对象,值为本线程的变量副本
valueMap.put(Thread.currentThread(), newValue);
}
public Object get() {
Thread currentThread = Thread.currentThread();
//②返回本线程对应的变量
Object o = valueMap.get(currentThread);
//③如果在Map中不存在,放到Map中保存起来
if (o == null && !valueMap.containsKey(currentThread)) {
o = initialValue();
valueMap.put(currentThread, o);
}
return o;
}
public void remove() {
valueMap.remove(Thread.currentThread());
}
public Object initialValue() {
return null;
}
}