我有一個personId列表。有兩個API調用來更新它(添加和刪除):Java併發 - 使用哪種技術來實現安全?
public void add(String newPersonName) {
if (personNameIdMap.get(newPersonName) != null) {
myPersonId.add(personNameIdMap.get(newPersonName)
} else {
// get the id from Twitter and add to the list
}
// make an API call to Twitter
}
public void delete(String personNAme) {
if (personNameIdMap.get(newPersonName) != null) {
myPersonId.remove(personNameIdMap.get(newPersonName)
} else {
// wrong person name
}
// make an API call to Twitter
}
我知道可以有併發問題。我讀到3解決方案:
- 方法
- 使用
Collections.synchronizedlist()
CopyOnWriteArrayList
我不知道喜歡防止矛盾哪一個。
我建議同步列表,而不是方法。在這種情況下,我肯定會避免使用'CopyOnWriteArrayList',因爲它比突變更適合遍歷。 – Moonbeam
從你的代碼片斷,我不知道你是如何確定你有併發問題?除非先添加項目,否則無法刪除項目,如果項目已在列表中,則無法添加相同的項目。我想我正試圖理解這裏同時發生的事情。 – CoolBeans
如果不同的線程調用上面的'add'和'delete','myPersonId'可以同時添加和刪除。 – Gravity