当前位置: 代码迷 >> 综合 >> 线程局部变量 - ThreadLocal
  详细解决方案

线程局部变量 - ThreadLocal

热度:0   发布时间:2023-12-14 01:17:32.0

做事务处理的时候会有一个问题,就是两个不同的模块,都需要同一个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());}}
}

 

  相关解决方案