在异步线程中使用request的正确做法

在处理异步线程时,若从Tomcat的Request对象中获取参数并进行后续GET请求,可能会遇到参数丢失的状况。这是因为Tomcat会复用Request对象。为避免这个问题,应当在开始异步操作前获取AsyncContext,如`AsyncContext asyncContext = request.startAsync();`,然后在处理任务后调用`asyncContext.complete()`。遵循此方法可以确保异步线程中正确处理请求参数。

背景:

在异步线程中获取了request中的参数,然后下一个请求是get请求的话,会偶尔出现参数丢失的问题.

提示没有传参数,实际传了.

原因:

tomcat 会复用Request对象

结论:

在异步线程中使用request

  1. 使用异步前先获取 AsyncContext    
    AsyncContext asyncContext = request.startAsync();
  2. 使用线程池处理任务
    asyncDo();
  3. 任务完成后调用asyncContext.complete()

参考:千万不要把Request传递到异步线程里面!有坑! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值