做事务处理的时候会有一个问题,就是两个不同的模块,都需要同一个connection(为了统一的事务处理,回滚或者提交),然后又不能在参数中传递connection,ThreadLocal正好可以解决这个问题。
ThreadLocal其实就是一个池Map<Thread,Object>,每一个线程过来都可以拿到当前线程的Value,可以穿透不同的类,只与线程有关。
package test;import java.util.Random;import org.junit.Test;public class TestThreadLocal {/** java.lang.ThreadLocal<T>* get() 返回此线程局部变量的当前线程副本中的值。* set(T value) 将此线程局部变量的当前线程副本中的值设置为指定值。*/private static ThreadLocal<Object> tLocal = new ThreadLocal<>();/*** 获取当前线程的值* @return*/public static Object getThreadVal() {Object object = tLocal.get();if(object==null) {System.out.println(Thread.currentThread().getName()+":空空如也...");object = new Random().nextInt(100);tLocal.set(object);}return object;}@Testpublic void test1() {System.out.println(getThreadVal());new AA().getTL();/*输出如下,与类无关main:空空如也...5959*/new Thread() {public void run() {System.out.println(getThreadVal());};/*Thread-0:空空如也...19*/}.start();}class AA{public void getTL() {System.out.println(getThreadVal());}}
}