Web服务是Servlet的内部实现。并且web / app服务器将通过新线程为每个新请求提供服务。
这意味着内部Web服务'每个请求都将在新线程中提供。现在考虑这个服务有多个消费者。所有消费者都有可能同时向提供商发送请求。这意味着这个Web服务实现需要线程安全来应对这种情况。
已经知道,没有成员变量使Web服务线程安全。但是,我需要使用成员变量,这些变量是通过spring bean注入的。
有关如何使其线程安全的任何建议吗?
根据定义,如果class1,一个线程安全类正在使用另一个不是线程安全的类对象,则class1将更加线程安全。
我的观点是使用spring beans已经完成了我的服务,现在,想让它们线程安全。对此有任何建议。
无法想到请求范围,因为在内部它使用jms消息而不是http请求和响应。关于这个的任何想法?
答案 0 :(得分:2)
由于你的调用是通过spring bean发生的,你需要创建一个spring bean来请求scoped bean。这就是你如何从spring API创建这样的bean。http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-request.The请求bean的实现是线程安全的,它使用ThreadLocal对象内部实现它。
此处还有一个有趣的主题可以解决这个问题。
Should I put my ThreadLocals in a spring-injected singleton?
希望这对你有所帮助。