[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-collections-kakim-obrazom-mozhno-poluchit-sinkhronizirovannye-obekty-standartnykh-kollektsiy":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},499,"kakim-obrazom-mozhno-poluchit-sinkhronizirovannye-obekty-standartnykh-kollektsiy",12,"collections","Collections","📚","Каким образом можно получить синхронизированные объекты стандартных коллекций","Через статические методы класса `Collections`, которые возвращают синхронизированные обертки (декораторы):\n\n```java\nList\u003CString> syncList = Collections.synchronizedList(new ArrayList\u003C>());\nSet\u003CString> syncSet = Collections.synchronizedSet(new HashSet\u003C>());\nMap\u003CString, Integer> syncMap = Collections.synchronizedMap(new HashMap\u003C>());\n```\n\nОбертки синхронизируют каждый метод через `synchronized(mutex)`. Однако составные операции (итерация, check-then-act) всё равно требуют ручной синхронизации:\n\n```java\nsynchronized (syncList) {\n    for (String s : syncList) {\n        \u002F\u002F безопасная итерация\n    }\n}\n```\n\nНачиная с Java 5, для многопоточного кода предпочтительны concurrent-коллекции: `ConcurrentHashMap` (вместо synchronizedMap), `CopyOnWriteArrayList` (вместо synchronizedList), `ConcurrentLinkedQueue`. Они обеспечивают лучшую масштабируемость за счет более гранулярной блокировки или lock-free алгоритмов.\n\n> **На собеседовании:** назовите Collections.synchronizedXxx() и покажите, что знаете о необходимости ручной синхронизации при итерации. Предложите ConcurrentHashMap и CopyOnWriteArrayList как более эффективные альтернативы.","","middle",[15,16],"jcf","concurrency",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":32,"featuredSnippetReady":33},"Синхронизированные коллекции — Collections.synchronizedXxx — Gymterview","Collections.synchronizedList\u002FSet\u002FMap — обёртки с synchronized. Итерация требует ручной синхронизации. Лучше: ConcurrentHashMap, CopyOnWriteArrayList.","Синхронизированные коллекции — Gymterview","Collections.synchronizedXxx() — обёртки. Итерация — synchronized вручную. Лучше: ConcurrentHashMap.",[25,26,27,8,28,29,30,31],"synchronizedList","synchronizedMap","synchronizedSet","ConcurrentHashMap","CopyOnWriteArrayList","Java","собеседование","Collections.synchronizedList\u002FSet\u002FMap — синхронизированные обёртки. Итерация требует ручного synchronized-блока. Лучше: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue — гранулярная блокировка или lock-free.",true]