2012-03-17 74 views
1

我想知道靜態方法java.lang.Math.max(int a, int b)是否線程安全?java.lang.Math.max(int a,int b)線程安全嗎?

如果它不是線程安全的,你能解釋一下這種情況下,由於多線程的併發訪問,這種方法給出了錯誤的輸出,並帶有一段代碼?

+7

您有超過30個問題沒有被接受的答案。 +1提出可回答的問題。 – 2012-03-17 15:15:09

+0

@PeterLawrey,但不是一個真正的問題,所以-1。 – EJP 2012-03-18 21:29:22

回答

9

您只會從至少有一個線程修改狀態的共享狀態的併發訪問中獲得線程安全問題。

Math.max(a, b)沒有任何狀態,共享或其他線程安全。

+0

你究竟是什麼意思的「國家」?你的意思是靜態方法?那麼所有的靜態方法變成線程安全的?! :-) – siva636 2012-03-17 16:14:04

+4

按州來說,我的意思是可以從一個州改變到另一個州。例如c = 0,後來它是c = 5.在Java中,必須有被更改的字段。 – 2012-03-17 16:18:20

+2

或者數據庫查詢或文件系統訪問。這也算作國家。 – 2012-03-17 21:07:27

12

Math.max是完全無狀態的,所以它完全是線程安全的。

+0

你究竟是什麼意思的「國家」?你的意思是靜態方法?那麼所有的靜態方法變成線程安全的?! :-) – siva636 2012-03-17 16:15:08

+1

一個方法是_stateless_,如果它總是會在同一個輸入上返回相同的輸出。 – 2012-03-17 20:16:08

+1

@Louis:不一定,一個方法可以寫入一個文件(這不是線程安全的),同時爲任何輸入返回0。 – danielkza 2012-03-24 04:38:01

14

線程安全,爲什麼不是?它沒有狀態,當你調用它時沒有任何對象被修改。該方法只是一個if語句:

public static int max(int a, int b) { 
    return (a >= b) ? a : b; 
} 
+0

「state」的意思是什麼?你的意思是靜態方法?那麼所有的靜態方法變成線程安全的?! :-) – siva636 2012-03-17 16:15:30

相關問題