Причина, по которой вы бы использовали
Collections.synchronizedList(List<T> list)
, заключается в том, что все методы, кроме итератора, синхронизируются с использованием самого списка в качестве мьютекса, поэтому вам не нужно делать
synchronized(list) {
list.add(type);
}
Вместо этого вы можете просто сделать
list.add(type);
, и это будет потокобезопасным.
Единственный метод, который не синхронизируется, - это итерация списка.Итератор списка не может быть возвращен синхронизированным образом, так как вы будете выполнять итерацию по нему позже, поэтому необходимо вручную синхронизировать список.Итак, в заключение, вам нужно синхронизировать список только при его переборе, все остальное вам не нужно.