/*ThreadLocal类:
* 该类提供了线程局部变量,它是一个池 Map<Thread.currentThread,locObj>,
* 池中为每个线程保存一个独立的局部变量,
* 每个线程可以从这个池中读取或设置自己的局部变量。
//底层就是一个map,用线程中的Thread.currentThread()作为识别的key,当前线程是一样的则拿到的value也是相同的。
所以可以跨类使用该变量,长使用在数据库连接池中方便事务的处理,让在不同dao中处理的事务可以共享一个Connection,做到事务的一致性
*/
public class ThreadLocalDemo {
//线程局部变量池
//private static ThreadLocal<Object> t = new ThreadLocal<Object>();
private static MyThreadLocal<Object> t = new MyThreadLocal<Object>();
public static Object getValue(){
//System.out.println(Thread.currentThread());
Object obj = t.get();
if(obj==null){
System.out.println("没有....");
Random r = new Random();
obj = r.nextInt(100);
t.set(obj);
}
return obj;
}
}
////////////////////////////////////////////////////////////////////////////////////自己做一个ThreadLocal的主要功能的类////////////////////////////////
//底层就是一个map,用线程中的Thread.currentThread()作为识别的key,当前线程是一样的则拿到的value也是相同的。
public class MyThreadLocal<T> {
private Map<Thread, Object> map = new HashMap<Thread, Object>();
public Object get(){
Thread curThread = Thread.currentThread();
return map.get(curThread);
}
public void set(Object obj){
Thread curThread = Thread.currentThread();
map.put(curThread, obj);
}
}