jakarta-ee - 如何保证Web服务线程安全?

标签 jakarta-ee

Web 服务是 Servlet 的内部实现。 Web/应用程序服务器将通过新线程服务每个新请求。

这意味着内部 Web 服务的每个请求都将在新线程中得到服务。现在考虑该服务有多个消费者。所有消费者有可能同时向提供者发送请求。这意味着此 Web 服务实现需要线程安全才能克服这种情况。

已经知道,没有成员变量可以使 Web 服务线程安全。但是,我需要使用成员变量,并且这些变量是通过 spring bean 注入(inject)的。

关于如何使它们线程安全有什么建议吗?

编辑:

根据定义,如果线程安全类 class1 使用另一个非线程安全类的对象,则 class1 将更加线程安全。

我的观点是,我的服务中已经使用了 spring bean,现在希望使它们线程安全。对此有何建议。

无法想到请求范围,因为它内部使用的是 jms 消息而不是 http 请求和响应。对此有什么想法吗?

最佳答案

由于您的调用是通过 spring bean 进行的,因此您需要创建一个 spring bean 来请求作用域 bean。这就是从 spring API 中创建此类 bean 的方法。 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-request.The request bean的实现是线程安全的,它内部使用ThreadLocal对象来实现。

这里还有一个有趣的线程解决了这个问题。

Should I put my ThreadLocals in a spring-injected singleton?

希望这对您有帮助。

关于jakarta-ee - 如何保证Web服务线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135727/

相关文章:

java - 使用jlabel在java中显示数学方程式

jakarta-ee - J2EE 错误处理 - 应用程序和用户

java - 如何在Primefaces数据表中显示Hibernate查询结果?

java - 是否可以在 hql 中使用 Between 、 current_date 和 subdate 函数?

java - 从 session 中检索用户名时的策略

java.io.FileNotFoundException : Could not open ServletContext resource [/WEB-INF/final-servlet. xml]

Java EE WebListener 和线程

java - 如何在servlet中获取参数时将String转换为ArrayList

eclipse - 在 Eclipse Luna 中安装 spring 插件

java - Struts2:struts.xml 不转发到操作名称