rve*_*laz 1 java multithreading tomcat servlets
在Tomcat容器中,是否所有与servlet关联的过滤器和servlet本身都使用相同的线程?ie,doFilter()是否与servlet的service()方法在同一个线程中运行?提前致谢.
我怀疑问题更多:我可以使用ThreadLocal对象在过滤器和servlet之间传递数据吗?在这种情况下答案是绝对的.应用服务器自己执行此操作以跟踪安全性,事务,连接和其他请求信息.
只需确保使用设置ThreadLocal的相同代码清除finally块中的ThreadLocal.
正如其他人已经指出的那样,servlet本身可能同步也可能不同步,但这与线程状态的概念正交; 即有多少线程针对对象foo执行而不是我可以将状态放入线程并让它被对象foo看到.第二个问题的答案总是肯定的.
答案是"否"的唯一一次是你是否使用了任何异步通信:
这些涉及app服务器启动与原始请求线程无关的新线程,因此任何ThreadLocal状态都不会与新线程一起传播.这也是为什么这些API不允许调用者的安全性和事务上下文传播到调用的方法,因为调用者和方法在不同的线程中.
高级注释,InheritableThreadLocal通常不起作用,因为异步调用通常由服务器针对线程池完成,而不是创建调用方线程的子线程.
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |