我正在使用MULE和Spring的项目。在上下文中,我们创建提供服务的bean。所有的bean基本上都是线程安全的单例。这是一种流行/推荐的书写服务方式吗?弹簧+线程安全单例
回答
默认情况下,Spring中的bean将是一个单例,这是您描述的一种非常常见的情况。
可能是有问题的表现明智。如果你有很多线程在争夺相同的服务。该bean被定义为线程安全的,因此来自不同线程的访问将被有效地序列化。
如果你在某种共享状态下做同步块,这真的只是一个问题。如果您没有对并发进行任何锁定,则使用单例的性能差异可以忽略不计。 – 2009-10-23 16:37:10
这是我想探讨的问题; AFAIK尝试访问单身人士将被序列化。它是一个线程安全的单例的事实意味着不需要锁定。所以,因为bugspy.net建议访问将被序列化。当然这是可扩展性的抑制因素? – user195166 2009-10-25 23:10:56
我不确定Spring对单身人士的访问是否自动进行序列化。检查这个。我认为这是单身人士的责任,要序列化并锁定任何需要被锁定的信息 – GabiMe 2009-10-25 23:19:34
在我们的RESTful服务,我们建立了我们的入口点的
@com.sun.jersey.spi.resource.PerRequest
基础上,
@org.springframework.context.annotation.Scope("request")
这使我们的吞吐量上升,但我们监测,以确保GC是好的足以不要臃肿的应用程序。
Spring单例本质上是线程安全的,加上这是默认范围 - 在我们所有的Web应用程序中使用它们时表现都非常好。
我对Spring很新,所以请忍受一下。当你说“Spring singletons本质上是线程安全的”。我是否仍然必须以线程安全的方式在bean中编写我的代码,以确保它是真实的,即我不应该创建任何模块级变量的新实例,因为下一个线程可能会使用它们? – user195166 2009-10-25 23:29:57
那么,如果你使用Spring的“依赖注入”,那么你不用担心生命周期,因此你不需要手动实例化bean - 这就是为什么你有Spring。所以,基本上你告诉Spring类'A'需要注入类'B',而Spring创建'A'和'B'并将'B'的一个实例注入到'A'的一个实例中。默认情况下,Spring创建2个bean的** singleton **实例,但是你的类需要本质上是线程安全的,即它们应该是无状态的。如果你需要保持状态,你可能需要原型,请求或会话范围。 – 2009-10-26 04:36:26
看看这个范围http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes – 2009-10-26 04:38:48
- 1. 弹簧组件字段线程安全
- 2. 弹簧注射 - 线程安全
- 3. 弹簧安全
- 4. Groovy单例线程安全
- 5. Neo4j弹簧安全
- 6. Angular2与弹簧靴和弹簧安全
- 7. 弹簧启动弹簧安全
- 8. 在弹簧安全与弹簧websocket集成弹簧安全性和
- 9. 弹簧安全2.0.7和弹簧2.5的登录表单问题
- 10. 弹簧安全单点登录
- 11. 如何让jsp的弹簧应用程序线程安全?
- 12. Android应用程序的弹簧安全
- 13. 弹簧视图安全
- 14. AOP弹簧安全错误
- 15. 记得我弹簧安全
- 16. 旁路弹簧安全
- 17. grails中的弹簧安全
- 18. 休眠+弹簧安全
- 19. Keycloak和弹簧安全
- 20. 弹簧安全和Struts 2
- 21. 弹簧安全与速度?
- 22. SAML2 AngularJs弹簧安全
- 23. 弹簧安全和VAADIN
- 24. 在多线程中使用线程安全单例的示例
- 25. Structuremap单例线程安全吗?
- 26. 弹簧安全打开弹出登录
- 27. 弹簧安全的Struts菜单。有什么优势?教程?例子?
- 28. 弹簧数据安全与弹簧安全 - 找到所有当前用户
- 29. 弹簧安全定制Authenticator在弹簧/弹簧安全版本升级后未被调用
- 30. 弹簧MVC +弹簧安全+ Thymeleaf - 错误解决模板
我发现一个网址http://blog.webscale.co.in/?p=64说弹簧注射不是线程安全的!矛盾!!任何人都可以请帮忙吗? – 2011-02-15 13:19:50