如下代码中,多线程处理业务,doSomeThing方法中会调用其他服务的feign方法,有一定的几率出现invalidte token : ***
//获取原线程的请求参数
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
// 异步处理各种情况
List<CompletableFuture<AsyncResult>> futureList = orderList
.stream()
.map(order->
CompletableFuture.supplyAsync(()->{
//设置请求原线程下的参数
RequestContextHolder.setRequestAttributes(attributes,true);
return this.doSomeThing(order);
},orderEditThreadPool))
.collect(Collectors.toList());
CompletableFuture<Void> allCF = CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0]));
allCF.join();
请问为什么会出现这种情况,主要是想知道原因,不是想知道解决方案。
能确定token invalid的原因吗
很有意思的问题,拿你的代码测试了下,服务重启以后,立马走你这个接口,开始跑的几个线程,大概率空,(我本地把线程池的最大线程数设置的比较少,每次必现,不是偶现)每次当我线程debug的时候,却发现数据都有了,
我在猜想,是不是getParameter这个方法,并不是线程安全的,然后跟着看了下getParam的处理,里面确实东西不少,
同样几个线程一起跑到getParam的时候,