Sim, é possível sincronizar um ArrayList. Para tal, a própria API Collections do java.util possui um método estático chamado Collections.synchronizedList, que retorna a lista que foi passada como argumento, mas sincronizada. Por exemplo, se definirmos
List listaSincronizada = Collections.synchronizedList(new ArrayList<UmaClasseQualquer>());
, todas as interações com essa lista ocorrerão de forma sincronizada. Além disso, é possível ter um único método sincronizado, por exemplo:
public synchronized void adicionaElemento(String texto) {
self.listaDeElementos.add(texto);
}
Entretanto, é importante lembrar que este método só será sincronizado consigo mesmo, ou seja, se tivermos que ter outro método que remove um elemento dessa lista, eles não estarão sincronizados entre si, o que ocasionalmente gerará problemas.