這是類:這個類是不是線程安全的?
public class Saver {
private static ArrayList<String> nameCache = new ArrayList<>();
public static synchronized void add(ArrayList<String> names) {
nameCache.addAll(names);
}
public static synchronized void save() {
for (String name : nameCache) {
//write name
}
nameCache.clear();
}
}
不同的線程要調用保存並添加不同的訂單。 但是這個同步關鍵字會使這個進程線程安全嗎?
這是解決併發問題的正確方法,如果不是解決這個問題的好方法?
是的。通過添加監視器(或其他機制),您可以使要保護線程安全的類安全,並且使用該類的線程將無法將它們全部一起使用。 – UDKOX
如果在執行addAll時另一個線程修改了'names',則可能會發生'ConcurrentModificationException'。我還想知道是否存在潛在的可見性問題,因爲'nameCache'沒有被聲明爲'final'。 –
@AndyTurner但nameCache是私人的? – user2997204