Concurrencia de Java: ¿utilizar qué técnica para lograr la seguridad?

Tengo una lista de personId. Hay dos llamadas API para actualizarlo (agregar y eliminar):

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
}

Sé que puede haber un problema de concurrencia. Leí sobre 3 soluciones:

synchronized el métodutilizarCollections.synchronizedlist()CopyOnWriteArrayList

No estoy seguro de cuál preferir para evitar la inconsistencia.

Respuestas a la pregunta(6)

Su respuesta a la pregunta