[英]Ways to handle thread-safety in spring beans and their pros & cons
我们在我的Web应用程序(Jetty)中使用了邮件服务。 服务对象在运行时使用spring bean注入。
现在,该服务不是线程安全的。 我们该如何处理? 通过阅读这里的一些帖子,我发现了以下选择。 请让我们知道以下优点和缺点。
春季配置:
<bean id="mailService" class="com.....MailService">
<property name="mailSender" ref="mailSender" />
<property name="registrationEmailMessage" ref="registrationEmail" />
...
</bean>
Java豆
@Autowired
MailService mailService;
同步邮件服务中的方法。
通过阻塞同步可能会减慢应用程序的速度,具体取决于同步块的执行时间。 如果是singleton
bean,则将按顺序执行对MailService
调用。 即使它是prototype
bean,仍然可以同时从不同的线程中调用它,并将导致顺序执行。
每次创建新对象。 如果它不消耗大量时间和资源,那是一个很好的解决方案。 在方法中创建新对象作为局部变量,它们将不会在线程之间共享。
ThreadLocal的。 功能强大的概念,但有自己的问题:
对象池。 我支持该解决方案。 在这种情况下,可以通过编写新的线程安全优化的silgleton包装器bean来实现线程安全,在这种情况下,它将包含MailService
对象池。 可以从任何线程安全地访问包装器,并且包装器将执行重定向到池中。 这是一个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.