[英]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.