是否建议使用ThreadLocal存储线程上下文?
我正在构建一个后端服务器应用程序,其中有我需要运行的典型服务。
注意:我们不是通过SOA架构构建它。
在每项服务开始之前,我需要给它一个具有一些服务上下文的状态,这是一个可变的映射来处理。当服务并行运行时,将共享此变量映射。
现在,例如,服务需要根据一些与线程相关的参数来检查天气是否必须暂停或超时。
问题:将线程上下文保留在本地线程中然后构建api的服务上下文以访问这些变量的参数是一种很好的方法。
这可以帮助我隐藏复杂的行为,而不会打开我的内部事物。
谢谢, 阿迪亚
答案 0 :(得分:1)
看起来您的服务器应用程序框架应该为您提供以更简单的方式实现此功能的方法 - 除非您实现自己的框架。
现在,例如,服务需要根据一些与线程相关的参数来检查天气是否必须暂停或超时。
EJB容器提供此类功能。 EJB还提供了一个会话上下文,以及确保在线程之间传输执行时可以恢复上下文的方法(通过钝化+激活)。
答案 1 :(得分:0)
你可以非常自由地使用ThreadLocal但是你必须干净地定义你的线程模型(看看你是否对线程创建有任何控制)...还要记住,确保存储在ThreadLocal中的状态可能不是你所期望的,如果您依赖任何清理代码。
另外:对于您的代码不直接负责的任何事情,请使用(不能再强调) WeakReference 。