Java 重型后端中端服务器应用程序中的线程本地建议
是否建议使用ThreadLocal存储线程上下文 我正在构建一个后端服务器应用程序,其中有我需要运行的典型服务 注意:我们不是在SOA体系结构上构建它 在开始每个服务之前,我需要给它一个状态,它有一些服务上下文,这是要处理的变量映射。当服务并行运行时,将共享此变量映射 例如,现在服务需要根据一些与线程相关的参数检查它是否必须停止或超时 问题:将线程上下文保持在线程本地,然后构建api的over service上下文来访问这些变量上的参数,这是一种好方法吗 这将有助于我隐藏复杂的行为,也不会打开我的内心世界 谢谢,Java 重型后端中端服务器应用程序中的线程本地建议,java,multithreading,design-patterns,jakarta-ee,oop,Java,Multithreading,Design Patterns,Jakarta Ee,Oop,是否建议使用ThreadLocal存储线程上下文 我正在构建一个后端服务器应用程序,其中有我需要运行的典型服务 注意:我们不是在SOA体系结构上构建它 在开始每个服务之前,我需要给它一个状态,它有一些服务上下文,这是要处理的变量映射。当服务并行运行时,将共享此变量映射 例如,现在服务需要根据一些与线程相关的参数检查它是否必须停止或超时 问题:将线程上下文保持在线程本地,然后构建api的over service上下文来访问这些变量上的参数,这是一种好方法吗 这将有助于我隐藏复杂的行为,也不会打开我
Aditya看起来您的服务器应用程序框架应该为您提供以更简单的方式实现此功能的方法,除非您正在实现自己的框架 例如,现在服务需要根据一些与线程相关的参数检查它是否必须停止或超时
EJB容器提供这种功能。EJB还提供了会话上下文以及确保在线程之间传输执行(通过钝化+激活)时可以恢复上下文的方法。您可以非常自由地使用ThreadLocal,但必须清晰地定义线程模型(请查看是否对线程创建有任何控制权)。。。还要记住,如果您依赖于任何清理代码,那么确保存储在ThreadLocal中的状态可能不是您所期望的
另外:对于代码不直接负责的任何内容,请使用(不能再强调)WeakReference。检查此项。我正在构建自己的框架,这正是我面临的设计问题。由于它是一个后端服务器应用程序,我不会有会话,我最初的观点是,我的服务通常应该在内存堆(上下文)上运行只是为了处理这样的线程范例和其他紧密耦合的操作,我的orchestrator设计和服务紧密结合在一起,这是我想要避免的。有一些非常高质量的开源框架可用(JBoss、Spring、Glassfish、Tomcat)。我可能会先看看其中一些,看看他们是如何处理这个问题的。