ThreadLocal如何通过接口自测是否能正确拿到结果呢,想A服务set进去B服务get拿到信息

img

img


我这么写完全拿不到对象信息,应该是非同1个线程的原因吧。请问这段代码如何自测?我想A服务set进去B服务get拿到信息。

  • ThreadLocal 每个线程都有自己的副本, 不同线程之间无法共享;
  • 你可以放到session里,然后每次请求,用过滤器拦截,重新从session获取,并设置到 ThreadLocal中, 就可以实现 A服务set进去, B服务get出来
  • 或者 你直接 从session 设置 和 读取。

一般通过ThreadLoacl表示在通一个线程里面值,A服务set,B服务Get是两个线程了,这里应该采用token的方式,A服务Set后返回一个token,B服务用这个token去Get

以下答案引用自GPT-3大模型,请合理使用:

解决方案:

可以创建一个线程池,让A服务在线程A中set进去ThreadLocal,而B服务再线程B中取出ThreadLocal,这样就能确保在同一个线程中共享同一个ThreadLocal对象。如下所示:

A服务:
ExecutorService executorService = Executors.newSingleThreadExecutor(); 
executorService.execute(() -> {
    // 在这个线程中set进ThreadLocal
    String info = "Some info";
    ThreadLocal<String> threadLocal = new ThreadLocal<>();
    threadLocal.set(info);
});

B服务:
ExecutorService executorService = Executors.newSingleThreadExecutor();  
executorService.execute(() -> {
    // 在这个线程中get出ThreadLocal
    ThreadLocal<String> threadLocal = new ThreadLocal<>();
    String info = threadLocal.get();
    System.out.println("Info: " + info);
});

上面创建的是一个单线程线程池,保证A服务和B服务都在同一个线程中执行,从而保证ThreadLocal在同一个线程之间可以共享。

如果我的回答解决了您的问题,请采纳我的回答