父子线程间传递请求头信息

(1)使用多线程时有时候会碰到子线程获取不到主线程的request的请求头信息,可以通过下面的代码让子线程获取父线程的请求头信息,前提是在执行子线程的时候父线程还在没有提前结束,如果父线程提前结束的话就会删除请求头信息,此时子线程获取请求头信息亦然是获取不到。此方法中的父线程需要等待子线程执行结束的情况。

   //获取父线程的请求头信息
  RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
  //在子线程中设置父线程的请求头信息    
  RequestContextHolder.setRequestAttributes(requestAttributes);
 
  //或者在父线程中设置请求头为父线程与子线程共享
  RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
  RequestContextHolder.setRequestAttributes(requestAttributes,true);
 
 

(2)如果父线程不需要等待子线程执行结束的情况下,提前结束的情况下。一是可以提前将父线程中的请求头信息获取到传入子线程中。二是将需要请求头的代码段放在父线程中去执行或者取消异步将代码都放在同一个线程中,这样就违背的设置多线程的初中。

 public String getCurrentThreadHeaderInto(){
        ServletRequestAttributes attributes =(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            return request.getHeader("key");
        }
        return StrUtil.EMPTY;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值