Какова цель синхронизации блока обхода, если мы используем Collections.synchrnizedList (Collection c)?
Я использую метод Collections.synchronizedList () для получения синхронизированной версии arrayList, тогда почему я должен помещать обход массива в синхронизированный блок?
Итак, я прохожу учебник о том, как сделать синхронный список arraylist. Я наткнулся на следующую строку кода.
import java.util. *;
class GFG
{
public static void main (String[] args)
{
List<String> list =
Collections.synchronizedList(new ArrayList<String>());
list.add("practice");
list.add("code");
list.add("quiz");
synchronized(list)
{
// must be in synchronized block
Iterator it = list.iterator();
while (it.hasNext())
System.out.println(it.next());
}
}
}
Мой вопрос: почему мы синхронизируем обход?
Даже если два потока будут проходить одновременно, и если оба будут пытаться структурно изменить массив одновременно, bcz не может быть возможным, если один поток добавляет элемент, не заблокирует ли он синхронизированный массив?