2009-10-26 104 views
0

我的問題是關於正在排隊的線程。對於我的例子,我有一個Spring上下文。我在無狀態類中有一個名爲CalculateTax的方法。一個請求進入,一個線程被創建(tA),並最終進入CalculateTax方法。在同一個「時間範圍內」,另一個請求進入,另一個線程被創建(tB)。現在,這是我想要了解的。在tA退出該方法之前,AFAIK tB不能執行CalculateTax。這是真的?單身人士和線程

+1

在這個問題中沒有引用Singleton的地方是Spring的上下文單例還是可以刪除整個單例? – Janusz 2009-10-26 10:55:04

+0

也許他意味着他在Spring上下文中聲明瞭他的bean是單例(Spring術語,不一定是該術語的經典含義),所以所有請求都獲得相同的對象實例 - 因此擔心併發。 – 2009-10-26 13:43:46

回答

2

不,它不是真的,如果它們是並行線程,每個線程都在它自己的執行堆棧中,所以它應該能夠在執行tA時執行。

這是線程的用途。

+0

謝謝 - 正是我所需要的 – user195166 2009-10-26 10:30:37

+1

並且除非您沒有使方法同步。 – 2009-10-26 10:54:30

+0

完全正確,除非你沒有讓他們同步 – OverLex 2009-10-26 14:39:27

3

只要CalculateTax只使用局部變量(即在方法中聲明),就不會有任何線程同步問題,並且多個線程可以毫無問題地調用該方法。

但是,如果出於某種原因CalculateTax使用在類級別定義的變量,並且您使用的是單例模式(您用「singleton」標記了您的問題,所以我猜你是),但您可能會遇到線程同步問題。

+0

他說這個班是無國籍的。所以... – 2009-10-26 10:47:50

+0

啊,沒有看到,謝謝 – JonoW 2009-10-26 10:56:17

0

一般來說,答案是不確定的。如果您的'請求'來自遠程客戶端,則答案取決於用於服務公開的機制的實現細節。

但是,我不知道真正使代理序列化請求的遠程通信框架,也就是說,假定目標服務開發人員解決這個問題(例如,您的任務是爲服務實現提供線程安全性,或者使用顯式同步等將所有請求序列化)。