2011-07-06 193 views
8

併發訪問,我們有一個方案,其中多個線程調用靜態方法類似以下:到公共靜態方法

public static boolean isEmpty(final String s) { 
    return s == null || s.length() < 1; 
} 

莫非導致不一致的問題,如果100個線程調用它呢?

+1

's.length()== 0'比單曲便宜.length()<1',並且字符串的長度不能小於零。 – sudocode

+1

@sudocode或使用'String.isEmpty'。 –

回答

19

不會。這不會遇到任何併發問題。

1)你在傳遞的參數是一個字符串,它是一個不可變類(其值不能被修改)

2)的方法並不試圖修改任何共享狀態

+0

如果參數是可變的,它會有所作爲嗎?例如,如果函數簽名是:'public static boolean isEmpty(String s){...}' – broadband

4

的方法,做不能訪問任何共享狀態。因此,不 - 不會造成任何問題。

4

不,因爲沒有共享狀態。即使您使用相同字符串s調用此方法,它仍然是安全的,因爲String是不可變且線程安全的。

BTW StringUtils.isEmpty() Apache Commons中的方法做同樣的事情。

0

「S」是所述傳遞的變量並且在該方法別的定義什麼應該有100個線程的情況下,調用它沒有問題