我有以下代碼:這段代碼是否線程安全,是否有更好的方法來實現它?
public class MySystem {
private ConcurrentHashMap<Integer, Integer> disabledList = new ConcurrentHashMap<>();
public void toggle(int id) {
synchronized (disabledList) {
if (disabledList.containsKey(id)) {
disabledList.remove(id);
} else {
disabledList.put(id);
}
}
}
public boolean isInactive(int id) {
return disabledList.containsKey(id);
}
}
這可能是多個線程可以調用toggleId
方法。上面的代碼是線程安全的嗎?有沒有更好的數據結構,我可以使用像CopyOnWriteArrayList
或ConcurrentHashMap
?
理想情況下,我想擺脫同步塊,但我不知道是否有可能。
哪個'ConcurrentHashSet'實現是你的代碼使用? –
Erm ...調用你的類'System'有點不禮貌,因爲它會影響java.lang.System類。 –
但我需要包裝檢查哈希集是否包含id和用於刪除syxinhronized塊中的id的代碼,否則在線程t2檢查包含後另一個線程(如t1)調用刪除時可能會出現競爭條件? – jcm