`
q474818917
  • 浏览: 38975 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

ThreadLocal个人理解 非官方言论

 
阅读更多

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;  
    }  
} 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics