Какими коллекциями пользоваться в многопоточной среде?
Первый вариант – превратить в синхронизированную обычную коллекцию, вызвав соответствующий ее типу метод Collections.synchronized*(). Самый общий и самый примитивный способ, создает обертку с синхронизацией всех операций с помощью synchronized.
Если работа с коллекцией состоит в основном из чтения, лучшая в плане производительности альтернатива – CopyOnWriteArrayList, и содержащий его в реализации CopyOnWriteArraySet. Потокобезопасность достигается копированием внутреннего массива при любой модификации, оригинальный массив остается immutable. Program order достигается модификатором volatile на внутреннем массиве.
Третий вариант – использование Concurrent-коллекций:
🔘 Неблокирующие хэш-таблицы ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (хэш-таблица в основе реализации)
🔘 Неблокирующие очереди ConcurrentLinkedQueue и ConcurrentLinkedDeque
🔘 Большой набор различных блокирующих очередей
Java Guru🤓 #java
Первый вариант – превратить в синхронизированную обычную коллекцию, вызвав соответствующий ее типу метод Collections.synchronized*(). Самый общий и самый примитивный способ, создает обертку с синхронизацией всех операций с помощью synchronized.
Если работа с коллекцией состоит в основном из чтения, лучшая в плане производительности альтернатива – CopyOnWriteArrayList, и содержащий его в реализации CopyOnWriteArraySet. Потокобезопасность достигается копированием внутреннего массива при любой модификации, оригинальный массив остается immutable. Program order достигается модификатором volatile на внутреннем массиве.
Третий вариант – использование Concurrent-коллекций:
Java Guru🤓 #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤3👍2
🏗 Курс “Software Architect” от OTUS — старт набора в группу обучения
Если хотите проектировать отказоустойчивые и масштабируемые системы — этот курс для вас!
Почему стоит пойти:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
👉 Пройдите вступительное тестирование:
https://vk.cc/cP26xy
Если хотите проектировать отказоустойчивые и масштабируемые системы — этот курс для вас!
Почему стоит пойти:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
👉 Пройдите вступительное тестирование:
https://vk.cc/cP26xy
❤3👍2🔥2🌚1
Какова временная сложность добавления элемента в TreeMap?
Anonymous Quiz
11%
O(1)
65%
O(log n)
9%
O(n)
14%
O(n log n)
1%
O(n2)
👍5🔥3😁1
Что будет результатом кода?
Anonymous Quiz
6%
Ошибка компиляции
27%
Result: 42
45%
TimeoutException
17%
Result: null
4%
Result: 500
🤔4👍3🔥3