2

Web 服务是 Servlet 的内部实现。并且 web/app 服务器将通过新线程为每个新请求提供服务。

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

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

关于如何使它们线程安全的任何建议?

编辑:

根据定义,如果class1,一个线程安全的类正在使用另一个非线程安全的类的对象,那么class1 的线程安全性更高。

我的意思是在我的服务中已经使用了 spring bean,现在,想让它们成为线程安全的。对此有任何建议。

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

4

1 回答 1

2

由于您的调用是通过 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。请求bean的实现是线程安全的,它使用ThreadLocal内部对象来实现它。

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

我应该把我的 ThreadLocals 放在一个弹簧注入的单例中吗?

希望这对您有所帮助。

于 2012-04-13T06:32:25.813 回答