ThreadLocal的简单理解

来源:互联网 发布:ubuntu 删除openjdk 编辑:程序博客网 时间:2024/05/12 06:07
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>();




}
0 0
原创粉丝点击