2016-10-03 86 views
3

我正在研究Java的java.util.concurrent包,下面的問題出現在我的腦海裏:使用Spring Framework時,我應該擔心多線程場景嗎?Spring和Thread的安全性

例如,我有一個基於Spring Boot的API。我的一個休息服務更新ArrayList。但ArrayList不是線程安全的,這可能會導致數據不一致。不過,我正在使用Spring Framework。

現在的問題是:我是否必須將當前ArrayList更改爲Java的併發集合之一或者Spring Framework本身是線程安全的,我不應該擔心多線程場景?

回答

2

您的REST服務應該寫成它是線程安全的。這意味着沒有可變數據的私人數據成員。如果是這樣的話,你是安全的。

如果您的所有方法都使用方法範圍變量,那麼您就是線程安全的。

您應該知道,應用程序服務器會爲每個進入的HTTP請求生成一個線程。如果您將該服務編寫爲單線程,那麼您將會很好。

您應該總是擔心多線程場景。

如果您的REST服務必須與數據庫交互,則不應共享該連接。您需要一個池化數據源來檢查每個請求的連接,在方法範圍中使用它並將其返回到池。 JDBC連接不是線程安全的,但是由於您將它們集中在一起,所以您可以避開它。

0

Spring MVC(Spring引導RestServices)基於Servlet API。這些serlet是多線程的,所以你必須注意併發性。

但它取決於,你怎麼編程。如果你的變量是類變量/類成員,那麼你需要注意併發性,但如果你的變量在方法中聲明,那麼這是線程安全的。