【发布时间】:2012-04-23 04:20:44
【问题描述】:
我已经知道大多数实现都使用单线程,但是规范中有什么暗示单线程的吗?我记得读过有关使用 JVM 集群的分布式应用服务器的文章。有没有这样的实现?或者是否有任何可能的实现?这些规范对这种分布式实现意味着什么,这种实现能保证单线程吗?
【问题讨论】:
标签: java jakarta-ee tomcat servlets servlet-filters
我已经知道大多数实现都使用单线程,但是规范中有什么暗示单线程的吗?我记得读过有关使用 JVM 集群的分布式应用服务器的文章。有没有这样的实现?或者是否有任何可能的实现?这些规范对这种分布式实现意味着什么,这种实现能保证单线程吗?
【问题讨论】:
标签: java jakarta-ee tomcat servlets servlet-filters
相关的servlet spec 3.0片段:
6.2.3 过滤环境
过滤器和过滤器链末端的目标 servlet 或资源必须在同一个调用线程中执行。
还有太多的框架依赖于在其中一个过滤器中设置的ThreadLocal。如果不同的线程正在运行过滤器和其他调用 servlet(技术上可能),它们都会被破坏。
请注意,分发仅适用于单独的请求,即集群中的不同服务器处理不同的请求。我从未听说过将单个请求拆分为机器。
【讨论】:
request.setAttribute(...) 是否值得用于通用编程(而不是 JSP)以支持 ThreadLocal? (这是假设 threadlocals 在每次请求后都被正确清理。)似乎 threadlocals 的类型安全性使它们成为比类型不安全的请求属性更好的候选者。此外,性能更好,因为您不处理字符串键、散列和映射。