1
我們想出了一個奇怪的錯誤,並且在調查代碼後,似乎它可能出現的唯一地方是出現併發問題的靜態方法。併發訪問靜態方法,在內部創建一個列表
這段代碼能否給出任何奇怪的問題,因爲裏面創建了List?
如果是這種情況,我是否應該將該列表作爲參數傳遞給線程安全(或公開並直接使用其他靜態方法)?
public static List<String> fooList(MyObject obj, List<String> listToCheck) {
List<String> checkedWords = new ArrayList<>();
for (String wordToCheck : listToCheck) {
if (wordChecker(obj, wordToCheck)) {
checkedWords.add(keyword);
}
}
return checkedWords;
}
private static boolean wordChecker(MyObject obj, String word) {
// doSomething
return result;
}
你說你懷疑併發問題,但是你的代碼示例沒有提供關於有多少線程可能調用這些方法的信息,或者有關這些線程可能共享哪些數據的信息。併發問題_always_圍繞共享數據。如果沒有共享數據,那麼就沒有問題;但可以共享'obj'嗎?可以'listToCheck'被共享? 'doSomething'是否會觸及任何共享數據? –
好的,我發現了一個不同的問題!無論如何,很高興知道我應該用這個安全。謝謝大家,併發總是一場噩夢! :) – Enrichman