2015-04-04 53 views
1

我有一個類Helper與一個單一的方法int findBiggestNumber(int [] array)和沒有實例變量。線程安全和方法參數

如果我製作一個對象Helper h = new Helper();並讓10個不同的線程使用該對象的唯一方法findBiggestNumber來查找它們的數組的最大數量,它們是否會相互干擾? 我的恐懼是,例如,當findBiggestNumber中的參數正在引用例如線程8中的數組時,線程1開始計算其數組的最大數字。這可能發生在我的例子中嗎?

+1

它們不會互相干擾,每個線程都會有自己的'array'變量 – 2015-04-04 00:40:38

+0

您是否對從此方法訪問的任何字段進行分類? – kraskevich 2015-04-04 00:41:05

+1

方法範圍內的變量就是這樣。如果沒有共享變量,那麼它完全是線程安全的。 – 2015-04-04 00:41:10

回答

1

不存在您描述的問題不會發生。由於你的助手類沒有成員,它是線程安全的。

線程安全問題在多線程之間共享可變(可變)數據時出現。然而在你的例子中,Helper並不包含任何數據(即變量),因爲每個線程都將自己的數據(int []數組)傳遞給Helper的findBiggestNumber()方法,所以它將在多個線程之間共享。

0

沒有你的實現findBiggestNumber,不可能說它是線程安全的,因爲你可以改變作爲參數傳遞的數組。如果這是真的,並且您將相同的數組傳遞給多個線程,那麼可能存在競爭條件;否則,它是線程安全的。

findBiggestNumber也可能會修改全局或靜態數據,這也會使其線程不安全。

+0

相同的數組不傳遞給多個線程。該數組也不會發生變異,它只是用來查找存儲在其中的最大數字。 – 2015-04-04 01:09:39