Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?

2026-05-25 20:290阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计799个文字,预计阅读时间需要4分钟。

Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?

在众多开发过程中,我们经常使用`RequestContextHolder.getRequestAttributes()`。这通常没问题,我也经常使用。但今天遇到了问题,获取到的实例是空的。原因是新开启了一个子线程,在子线程中调用`RequestCon`。

相信很多开发过程中都用过RequestContextHolder.getRequestAttributes(),没错,我也经常用,但今天出现了问题,获取到的实例是空的

原因是因为我新开了一个子线程,在子线程调用了RequestContextHolder.getRequestAttributes()。实际获取到的是空的

然后查看了源码

Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?

ThreadLocal获取。一个请求到达容器后,Spring会把该请求Request实例通过setRequestAttributes方法 把Request实例放入该请求线程内ThreadLocalMap中,然后就可以通过静态方法取到。原理就是ThreadLocal,但ThreadLocal不能让子线程继承ThreadLocalMap信息,可以使用InherbritableThreadLocal实现子线程信息传递。

阅读全文

本文共计799个文字,预计阅读时间需要4分钟。

Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?

在众多开发过程中,我们经常使用`RequestContextHolder.getRequestAttributes()`。这通常没问题,我也经常使用。但今天遇到了问题,获取到的实例是空的。原因是新开启了一个子线程,在子线程中调用`RequestCon`。

相信很多开发过程中都用过RequestContextHolder.getRequestAttributes(),没错,我也经常用,但今天出现了问题,获取到的实例是空的

原因是因为我新开了一个子线程,在子线程调用了RequestContextHolder.getRequestAttributes()。实际获取到的是空的

然后查看了源码

Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?

ThreadLocal获取。一个请求到达容器后,Spring会把该请求Request实例通过setRequestAttributes方法 把Request实例放入该请求线程内ThreadLocalMap中,然后就可以通过静态方法取到。原理就是ThreadLocal,但ThreadLocal不能让子线程继承ThreadLocalMap信息,可以使用InherbritableThreadLocal实现子线程信息传递。

阅读全文