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/