Содержание
- 2. Agenda Примитивы синхронизации Thread-safe коллекции Планировщики и пулы потоков Fork/Join Framework Утилитные классы
- 3. Lock – интерфейс, обозначающий мьютекс в явном виде При этом гораздо более гибкий, чем стандартные java-мониторы
- 4. Lock Рассмотрим реализацию thread-safe счетчика с использованием Lock В отличие от synchronized Lock является не средством
- 5. Lock Наиболее распространенный паттерн для работы с Lock’ами представлен справа Он гарантирует, что Lock будет отпущен
- 6. Lock fairness Fairness (равнодоступность) – свойство Lock’a, при котором при освобождении управление отдается тому из ожидающих
- 7. Lock – масштабируемость Тест для измерения относительной масштабируемости synchronized в сравнении с Lock, использует генератор псевдослучайных
- 8. Как обеспечить atomicity и visibility без memory barrier’a? Compare-and-set (compare-and-swap, CAS) – инструкция, поддерживаемая на уровне
- 9. Atomic wrappers Обертки над примитивными типами AtomicInteger AtomicLong AtomicBoolean AtomicReference Предоставляют реализации CAS-операций Содержат набор полезных
- 10. Atomic wrappers - пример
- 11. Agenda Примитивы синхронизации Thread-safe коллекции Планировщики и пулы потоков Fork/Join Framework Утилитные классы
- 12. Collections.synchronized…() Класс Collections содержит среди прочих методы Collections.synchronizedCollection(Collection c) Collections.synchronizedList(List list) Collections.synchronizedMap(Map m) Collections.synchronizedSet(Set s) Они
- 13. Legacy implementations HashTable – синхронизированная реализация интерфейса Map Все методы синхронизированы Потребляет заметно меньше памяти, чем
- 14. Java.util.concurrent – новые интерфейсы
- 15. java.util.ConcurrentMap Любые попытки сделать реализацию Map thread-safe упираются в необходимость атомарности группы операций Например: «Если в
- 16. java.util.ConcurrentMap boolean remove(Object key, Object value) boolean replace(K key, V oldValue, V newValue) V replace(K key,
- 17. ConcurrentHashMap Основная thread-safe реализация интерфейса Map Реализует также ConcurrentMap Внутри похожа на HashMap, но имеет дополнительные
- 18. ConcurrentHashMap Версии реализации от 7 и ниже используют сегментированную структуру При записи блокируется не весь Map,
- 19. ConcurrentHashMap vs HashTable HashTable блокирует всю таблицу целиком, ограничивая вертикальную масштабируемость С какого-то момента добавление новых
- 20. Blocking Queues Отлично подходят для реализации шаблона Producer-Consumer Добавляют набор блокирующих методов для работы с очередью
- 21. Blocking queues: API reference
- 22. Copy-on-write CopyOnWriteArrayList и CopyOnWriteArraySet основаны на массиве, копируемом при операции записи Уже открытые итераторы при этом
- 23. Copy-on-write - Реализация И её реализация в CopyOnWriteArrayList: Операция добавления элемента в список:
- 24. Skip Lists ConcurrentSkipListMap и ConcurrentSkipListSet основаны на Skip List’ах Это единственные доступные thread-safe реализации NavigableSet и
- 25. Итераторы Как правило итераторы коллекций из java.util.concurrent не бросают ConcurrentModificationException Они не являются fail-fast Они гарантированно
- 26. Итераторы Выполнение этого кода приводит к ConcurrentModificationException Если заменить реализацию на CopyOnWriteArrayList, то исключения не будет
- 27. Agenda Примитивы синхронизации Thread-safe коллекции Планировщики и пулы потоков Fork/Join Framework Утилитные классы
- 28. Callable Имеет единственный метод V call() По принципу действия схож с Runnable
- 29. Executor Executor – интерфейс, обозначающий абстрактную систему для асинхронного исполнения задач В него передают исполняемый код,
- 30. ExecutorService Представляет собой расширение Executor’а с дополнительными возможностями Способен создавать объекты Future , представляющие собой результаты
- 31. Future Future – интерфейс, семантически обозначающий результат выполнения асинхронной операции Тип-параметр – это тип результата операции
- 32. Future - Пример
- 33. Agenda Примитивы синхронизации Thread-safe коллекции Планировщики и пулы потоков Fork/Join Framework Утилитные классы
- 34. Fork/Join – это подход к написанию многопоточных программ, основанный на следующем рекурсивном алгоритме: Если задача достаточно
- 35. Fork/Join Framework Начиная с Java 7 в стандартные библиотеки Java включен Fork/Join Framework, который предоставляет инфраструктуру
- 36. Fork/Join Framework API Интерфейс ForkJoinTask представляет собой небольшую задачу как результат декомпозиции на этапе Fork. Есть
- 37. Fork/Join Framework - Пример Пример вычисляет N-ый член последовательности Фибоначи методом Fork/Join Одна часть выполняется в
- 38. Agenda Примитивы синхронизации Thread-safe коллекции Планировщики и пулы потоков Fork/Join Framework Утилитные классы
- 39. ThreadLocal ThreadLocal – типизированный контейнер для объектов, ассоциирующий содержимое с текущим потоком. Проще говоря, ThreadLocal возвращает
- 40. Semaphore Объект, позволяющий войти в заданный участок кода не более чем n потокам одновременно N определяется
- 41. CountDownLatch Он предоставляет две основные операции: countDown() – уменьшает значение счетчика на единицу await() – текущий
- 42. CountDownLatch - Пример
- 43. CyclicBarrier Позволяет N потокам дождаться друг друга в некоторой точке выполнения N задается параметром конструктора Как
- 44. CyclicBarrier - Пример
- 46. Скачать презентацию