Если я решил использовать сборку без потоковой передачи и синхронизировать ее доступ, нужно ли мне синхронизировать любую мутацию в конструкторе? Например, в следующем коде я понимаю, что ссылка на список будет видна для всех постсоборных потоков, поскольку она является окончательной. Но я не знаю, является ли это безопасной публикацией, потому что добавление в конструктор не синхронизируется и добавляет ссылку в массив ArrayList elementData, что не является окончательным.
private final List<Object> list;
public ListInConstructor()
{
list = new ArrayList<>();
// synchronize here?
list.add(new Object());
}
public void mutate()
{
synchronized (list)
{
if (list.checkSomething())
{
list.mutateSomething();
}
}
}