您的位置:首页 > 其它

ThreadLocal的简单理解

2017-04-12 21:57 288 查看
package threadLocal;

import java.util.HashMap;

import java.util.Map;

import org.junit.Test;

public class thread {

// @Test

//public void demo(){

// final ThreadLocal<String> t=new ThreadLocal<String>();

// t.set("moving");//存

// String s=t.get();//得到

// System.out.println(s);//打印

// new Thread(){//匿名内部类对象的实例化

// public void run(){

// System.out.println("匿名内部内启动了"+t.get());

// }

// }.start();

//}
//上面的方法等同于下面的方法
@Test
public<T> void demo2(){
final T key = null;
final Map<Thread, T> aMap=new HashMap<Thread, T>();
aMap.put(Thread.currentThread(), key);
new Thread(){
public void run(){
System.out.println(Thread.currentThread().getName());
System.out.println(Thread.currentThread());
}
}.start();
}

}

//模拟ThreadLocal的内部实现

class TL<T>{//ThreadLocal底层是map集合
private Map<Thread, T> map=new HashMap<Thread, T>();//用当前的线程做键
public void set(T data){
map.put(Thread.currentThread(),data);//加入当前线程有值
}
public T get() {
return map.get(Thread.currentThread());//得到当前线程所对应的value
}
public void remove(){
map.remove(Thread.currentThread());//删除当前线程的值和键
}

}

//通常用在一个类的成员上,每个线程访问它时都是自己的,互不干扰

//之后可以写上ThreadLocal<Connction>处理并发访问的问题了

//可以处理并发访问的情况

class people{
private ThreadLocal<String> name=new ThreadLocal<String>();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: