Java中子线程如何安全调用RequestContextHolder.getRequestAttributes()?
- 内容介绍
- 文章标签
- 相关推荐
本文共计799个文字,预计阅读时间需要4分钟。
在众多开发过程中,我们经常使用`RequestContextHolder.getRequestAttributes()`。这通常没问题,我也经常使用。但今天遇到了问题,获取到的实例是空的。原因是新开启了一个子线程,在子线程中调用`RequestCon`。
相信很多开发过程中都用过RequestContextHolder.getRequestAttributes(),没错,我也经常用,但今天出现了问题,获取到的实例是空的
原因是因为我新开了一个子线程,在子线程调用了RequestContextHolder.getRequestAttributes()。实际获取到的是空的
然后查看了源码
ThreadLocal获取。一个请求到达容器后,Spring会把该请求Request实例通过setRequestAttributes方法 把Request实例放入该请求线程内ThreadLocalMap中,然后就可以通过静态方法取到。原理就是ThreadLocal,但ThreadLocal不能让子线程继承ThreadLocalMap信息,可以使用InherbritableThreadLocal实现子线程信息传递。
本文共计799个文字,预计阅读时间需要4分钟。
在众多开发过程中,我们经常使用`RequestContextHolder.getRequestAttributes()`。这通常没问题,我也经常使用。但今天遇到了问题,获取到的实例是空的。原因是新开启了一个子线程,在子线程中调用`RequestCon`。
相信很多开发过程中都用过RequestContextHolder.getRequestAttributes(),没错,我也经常用,但今天出现了问题,获取到的实例是空的
原因是因为我新开了一个子线程,在子线程调用了RequestContextHolder.getRequestAttributes()。实际获取到的是空的
然后查看了源码
ThreadLocal获取。一个请求到达容器后,Spring会把该请求Request实例通过setRequestAttributes方法 把Request实例放入该请求线程内ThreadLocalMap中,然后就可以通过静态方法取到。原理就是ThreadLocal,但ThreadLocal不能让子线程继承ThreadLocalMap信息,可以使用InherbritableThreadLocal实现子线程信息传递。

