併發訪問,我們有一個方案,其中多個線程調用靜態方法類似以下:到公共靜態方法
public static boolean isEmpty(final String s) {
return s == null || s.length() < 1;
}
莫非導致不一致的問題,如果100個線程調用它呢?
併發訪問,我們有一個方案,其中多個線程調用靜態方法類似以下:到公共靜態方法
public static boolean isEmpty(final String s) {
return s == null || s.length() < 1;
}
莫非導致不一致的問題,如果100個線程調用它呢?
不會。這不會遇到任何併發問題。
1)你在傳遞的參數是一個字符串,它是一個不可變類(其值不能被修改)
2)的方法並不試圖修改任何共享狀態
如果參數是可變的,它會有所作爲嗎?例如,如果函數簽名是:'public static boolean isEmpty(String s){...}' – broadband
的方法,做不能訪問任何共享狀態。因此,不 - 不會造成任何問題。
不,因爲沒有共享狀態。即使您使用相同字符串s
調用此方法,它仍然是安全的,因爲String
是不可變且線程安全的。
BTW StringUtils.isEmpty()
Apache Commons中的方法做同樣的事情。
「S」是所述傳遞的變量並且在該方法別的定義什麼應該有100個線程的情況下,調用它沒有問題
's.length()== 0'比單曲便宜.length()<1',並且字符串的長度不能小於零。 – sudocode
@sudocode或使用'String.isEmpty'。 –