For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
在java培训的课程中有一个内容就是ThreadLocal,那ThreadLocal是个什么呢?下面昆明达内小编就和大家做个分享这个对象就是为了多线程而生的,假如没有了多线程ThreadLocal也就没有存在的必要了。可以将任何你想在每个线程独享的对象放置到里面,并在任何时候你可以把他取出来。那先来看ThreadLocal基本知识。
1、ThreadLocal理解
1.1 ThreadLocal会导致内存泄漏吗
首先明确表示使用ThreadLocal不会导致内存泄漏。
1.2使用全局Map替换ThreadLocal可不可以
我曾经也想过使用全局Map来替换ThreadLocal
2.3 对比ThreadLocal和synchronized同步机制
很多人都会对这两个对象进行比对,我也谈一下我自己的想法。
使用synchronized是为了将多条语句进行原子化操作,昆明达内培训小编比说对于递增操作i++,任意一个线程在执行代码时都要保证别的线程不能执行这个代码,否则就会产生脏数据,使用synchronized可以避免这一点。
而使用ThreadLocal就是给每个线程存储对象用的。既然每个线程使用了自己的对象,没有了竞争就不会出现多线程相关的问题。
2、基本用法
ThreadLocal的使用方法其实特别简单:
在某个类(相当于工厂类,因为当获取不到的时候你要创建一个给它)中创建静态的ThreadLocal。
在别的地方调用它的set和get方法用来存放对象。
下面达内培训小编展示一个样例:
package yiwangzhibujian;
public class ThreadLocalUse{
//创建一个静态的ThreadLocal对象,当做仓库,存储每个线程自己的资源
//此处用Object来代替,可以使连接Connection
private static ThreadLocal<Object> store=new ThreadLocal<Object>();
//当每个线程要获取一个线程资源的时候,调用get方法
public Object get(){
//首先去仓库中去寻找
Object obj=store.get();
//如果不存在那就创建一个给线程,并把创建的放到仓库中
if(obj==null){
obj=new Object();
set(obj);
}
return obj;
}
//想将线程资源放到仓库调用set方法,
public void set(Object obj){
store.set(obj);
}
}
这是一个使用模板,可以根据具体情况来做相应改变。