РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
326 of 1163 menu

Метод synchronizedList

Метод synchronizedList класса Collections возвращает синхронизированную (потокобезопасную) обертку над переданным списком. В первый параметр мы передаем список, который нужно обернуть. Метод возвращает объект типа List, все методы которого защищены внутренней синхронизацией, что позволяет безопасно использовать список из нескольких потоков.

Важно понимать: метод не создает копию списка, а возвращает обертку над исходным списком. Это означает, что все изменения отражаются на исходном списке, а для корректной итерации по синхронизированному списку необходимо вручную синхронизироваться на самом объекте списка.

Синтаксис

Collections.synchronizedList(list)

Пример

Давайте создадим синхронизированный список на основе обычного ArrayList и добавим в него элементы:

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); List<String> syncList = Collections.synchronizedList(list); syncList.add("a"); syncList.add("b"); syncList.add("c"); System.out.println(syncList); System.out.println(list); } }

Результат выполнения кода:

[a, b, c] [a, b, c]

Обратите внимание, что изменения в синхронизированном списке отразились и на исходном списке list, так как обертка не создает копию.

Пример

Давайте получим синхронизированный список напрямую из метода synchronizedList и проверим его размер:

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); List<Integer> syncList = Collections.synchronizedList(list); System.out.println(syncList.size()); System.out.println(syncList.get(1)); } }

Результат выполнения кода:

3 2

Пример

Давайте выполним безопасную итерацию по синхронизированному списку с ручной синхронизацией:

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(List.of("a", "b", "c", "d", "e")); List<String> syncList = Collections.synchronizedList(list); synchronized (syncList) { for (String element : syncList) { System.out.println(element); } } } }

Результат выполнения кода:

"a" "b" "c" "d" "e"

Смотрите также

  • класс Collections,
    который содержит статические методы для работы с коллекциями
  • метод unmodifiableList,
    который создает неизменяемый список
  • метод singletonList,
    который создает список из одного элемента
  • метод emptyList,
    который возвращает пустой список
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить