concurrency utilities
DESCRIPTION
Java Advanced. Concurrency Utilities. Содержание. Многопоточные коллекции Примитивы синхронизации Атомарные операции Блокировки Управление заданиями Дополнительные возможности Заключение. Concurrency Utilities. Набор классов, облегчающих написание многопоточных программ - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/1.jpg)
Concurrency UtilitiesJava Advanced
![Page 2: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/2.jpg)
Java Advanced / Concurrency Utilities 2
СПбГУ ИТМО
Georgiy Korneev
Содержание
Многопоточные коллекцииПримитивы синхронизацииАтомарные операцииБлокировкиУправление заданиямиДополнительные возможностиЗаключение
![Page 3: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/3.jpg)
Java Advanced / Concurrency Utilities 3
СПбГУ ИТМО
Georgiy Korneev
Concurrency Utilities
Набор классов, облегчающих написание многопоточных программ
Пакет java.util.concurrent Многопоточные коллекции Примитивы синхронизации Управление заданиями
Пакет java.util.concurrent.locks Работа с блокировками
Пакет java.util.concurrent.atomic Атомарные переменные
![Page 4: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/4.jpg)
Многопоточные коллекции
Часть 1
![Page 5: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/5.jpg)
Java Advanced / Collections Framework 5Georgiy Korneev
Многопоточные очереди
Интерфейс BlockingQueueОтличие от обычных очередей
Возможно ограничение размера Методы добавления могут бросают
IllegalStateException Дополнительные операции
![Page 6: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/6.jpg)
Java Advanced / Collections Framework 6Georgiy Korneev
Дополнительные операции
Добавление элемента put(E) – блокируется до появление места. offer(E, timeout, unit) – блокируется на время.
Удаление элемента take() – блокируется до появления элемента. poll(E, timeout, unit) – блокируется на время.
Получение нескольких элементов drainTo(Collection) – получение всех элементов. drainTo(Collection, max) – получение max
элементов.
![Page 7: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/7.jpg)
Java Advanced / Collections Framework 7Georgiy Korneev
Производитель-потребитель (1)
Производительvoid run() { try { while (true) { E e; // Создание элемента queue.put(e); } } catch (InterruptedException e) { }}
![Page 8: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/8.jpg)
Java Advanced / Collections Framework 8Georgiy Korneev
Производитель-потребитель (2)
Потребительvoid run() {
try {
while (true) {
E e = queue.take();
// Обработка элемента
}
} catch (InterruptedException e) {
}
}
![Page 9: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/9.jpg)
Java Advanced / Collections Framework 9Georgiy Korneev
Реализации BlockingQueue
ArrayBlockingQueue – очередь на массиве LinkedBlockingQueue – очередь на списке
PriorityBlockingQueue – очередь на хипе SynchronousQueue – очередь без
"внутренности"
![Page 10: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/10.jpg)
Java Advanced / Collections Framework 10Georgiy Korneev
Многопоточные отображения
Представляются интерфейсом ConcurrentMap<K, V>
Дополнительные методы putIfAbsent(K, V) – добавляет отображение K,
если его ранее не было remove(K, V) – удаляет K, если он отображен
на V replace(K, V) – заменяет отображение K replace(K, oldV, newV) – условная замена
отображения для ключа K
![Page 11: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/11.jpg)
Java Advanced / Collections Framework 11Georgiy Korneev
Другие многопоточные коллекции
Коллекции с многопоточным доступом ConcurrentHashMap – отображение ConcurrentLinkedQueue – очередь на списке
Коллекции, “самокопирующиеся” при записи CopyOnWriteArrayList – список на массиве CopyOnWriteArraySet – множество на массиве
![Page 12: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/12.jpg)
Атомарные операцииЧасть 2
![Page 13: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/13.jpg)
Java Advanced / Collections Framework 13Georgiy Korneev
Атомарные операции
Общие операции get() – атомарное чтение set(value) – атомарная запись compareAndSet(expected, value) – сравнение и
запись weakCompareAndSet(expected, value) – слабое
сравнение и записьОперации над числами
addAndGet() / getAndAdd() getAndIncrement() / incrementAndGet() getAndDecrement() / decrementAndGet()
![Page 14: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/14.jpg)
Java Advanced / Collections Framework 14Georgiy Korneev
Атомарные переменные
Типы AtomicBoolean AtomicInteger AtomicLong AtomicReference
Операции Обычные
![Page 15: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/15.jpg)
Java Advanced / Collections Framework 15Georgiy Korneev
Атомарные массивы
Типы AtomicIntegerArray AtomicLongArray AtomicReferenceArray
Операции Обычные, с указанием индекса
![Page 16: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/16.jpg)
Java Advanced / Collections Framework 16Georgiy Korneev
Атомарный доступ к полям
Типы AtomicIntegerFieldUpdater AtomicLongFieldUpdater AtomicReferenceFieldUpdater
Операции Обычные, с указанием объекта Создание newUpdater(class, fieldName)
![Page 17: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/17.jpg)
Java Advanced / Collections Framework 17Georgiy Korneev
Помеченные ссылки
Типы AtomicMarkableReference – ссылка помеченная
флажком AtomicStampedReference – ссылка помеченная
числом
![Page 18: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/18.jpg)
Java Advanced / Collections Framework 18Georgiy Korneev
Операции с помеченными ссылками
Чтения getReference() – прочитать ссылку getX() – прочитать пометку V get(X[] holder) – прочитать ссылку и пометку
Установки set(valueV, valueX) – установить пометку и
значение. attemptX(oldX, newX) – изменить пометку
Условной установки compareAndSet(oldV, newV, oldX, newX)
![Page 19: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/19.jpg)
Примитивы синхронизации
Часть 3
![Page 20: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/20.jpg)
Java Advanced / Collections Framework 20Georgiy Korneev
Примитивы синхронизации
Semaphore – семафорCyclicBarrier – многоразовый барьерCountDownLatch – защелкаExchanger – рандеву
![Page 21: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/21.jpg)
Java Advanced / Collections Framework 21Georgiy Korneev
Семафоры
Семафор имеет емкость, указываемую при создании
Методы acquire(n?) – получить разрешение release(n?) – отдать разрешение tryAquire(n?, time?) – попробовать получить
разрешение reducePermits(n) – уменьшить количество
разрешений drainPermits() – забрать все разрешения статистика
![Page 22: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/22.jpg)
Java Advanced / Collections Framework 22Georgiy Korneev
Барьеры
Количество потоков и действие на барьере указывается при создании
Методы await(time?) – барьер. reset() – возвращает барьер в исходное
состояние isBroken() – “сломан” ли барьер статистика
![Page 23: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/23.jpg)
Java Advanced / Collections Framework 23Georgiy Korneev
Защелки
Высота защелки указывается при созданииМетоды
await(time?) – ждет спуска защелки. countDown() – опускает защелку на единицу. getCount() – текущая высота защелки.
![Page 24: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/24.jpg)
Java Advanced / Collections Framework 24Georgiy Korneev
Рандеву
Позволяет потокам синхронно обмениваться объектами
Методы exchange(V x, time?) – обменяться
![Page 25: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/25.jpg)
БлокировкиЧасть 4
![Page 26: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/26.jpg)
Java Advanced / Collections Framework 26Georgiy Korneev
Блокировки
Интерфейс LockМетоды
lock() – захватить блокировку lockInterruptibly() – захватить блокировку tryLock(time?) – попытаться захватить
блокировку unlock() – отпустить блокировку newCondition() – создать условие
![Page 27: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/27.jpg)
Java Advanced / Collections Framework 27Georgiy Korneev
Условия
Интерфейс Condition await(time?) – ждать условия awaitUntil(deadline) – ждать условия до
времени awaitUninterruptibly() – ждать условие signal() – подать сигнал signalAll() – подать сигнал всем
![Page 28: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/28.jpg)
Java Advanced / Collections Framework 28Georgiy Korneev
Реализация блокировки
Класс ReentrantLockДополнительные методы
isFair() – “честность” блокировки isLocked() – блокировка занята getQueuedThreads() / getQueueLength() /
hasQueuedThread(thread) / hasQueuedThreads() – потоки, ждущие блокировку
getWaitingThreads(condition) / getWaitQueueLength(condition) – потоки, ждущие условие
![Page 29: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/29.jpg)
Java Advanced / Collections Framework 29Georgiy Korneev
Читатели и писатели
Интерфейс ReadWriteLock Методы
readLock() – блокировка для читателей writeLock() – блокировка для писателей
Реализация ReentrantReadWriteLock
![Page 30: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/30.jpg)
Управление заданиямиЧасть 5
![Page 31: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/31.jpg)
Java Advanced / Collections Framework 31Georgiy Korneev
Исполнители
Интерфейс Executor execute(Runnable) – выполнить задание
Интерфейс ExecutorService submit(Runnable) – выполнить задание Future<V> submit(Callable<V>) – выполнить
функцию invokeAll(List<Callable>) – выполнить все
функции invokeAny(List<Callable>) – успешно выполнить
функцию
![Page 32: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/32.jpg)
Java Advanced / Collections Framework 32Georgiy Korneev
Функции и результаты
Интерфейс Callable<V> – функция V call() – подсчитать функцию
Интерфейс Future<V> – результат get(timeout?) – получить результат isDone() – окончено ли выполнение cancel() – прервать выполнение isCancelled() – прервано ли выполнение
![Page 33: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/33.jpg)
Java Advanced / Collections Framework 33Georgiy Korneev
Реализация исполнителей
Класс ThreadPoolExecutor corePoolSize – минимальное количество
потоков maxPoolSize максимальное количество
потоков blockingQueue – очередь заданий keepAliveTime – время жизни потока threadFactory – фабрика потоков …
![Page 34: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/34.jpg)
Java Advanced / Collections Framework 34Georgiy Korneev
Отложенное исполнение
Интерфейс ScheduledExecutorService schedule(callable, timeout) – исполнить через
timeout schedule(runnable, timeout?) – исполнить через
timeout sheduleAtFixedRate(runnable, initialDelay, period,
unit) – периодическое исполнение scheduleWithFixedDelay(runnable, initialDelay,
delay, unit) – исполнение с равными интервалами
Все методы возвращают ScheduledFuture
![Page 35: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/35.jpg)
Java Advanced / Collections Framework 35Georgiy Korneev
Реализация отложенного исполнения
Класс ScheduledThreadPoolExecutor
![Page 36: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/36.jpg)
Java Advanced / Collections Framework 36Georgiy Korneev
Класс Executors
Создание привилегированных Callable Создание фабрик потоковСоздание фабрик привилегированных
потоковСоздание исполнителей с заданным
числом потоковСоздание исполнителей с неограниченным
числом потоков
![Page 37: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/37.jpg)
Дополнительные возможности
Часть 6
![Page 38: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/38.jpg)
Java Advanced / Collections Framework 38Georgiy Korneev
Интервалы времени
Перечисление TimeUnit SECONDS MILLISECONDS MICROSECONDS NANOSECONDS
Интервалы задаются парой Значение Единица измерения
![Page 39: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/39.jpg)
Java Advanced / Collections Framework 39Georgiy Korneev
Очереди с задержкой
Класс DelayQueueИнтерфейс Delayed
getDelay(unit) – получить остаток задержки
![Page 40: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/40.jpg)
ЗаключениеЧасть 7
![Page 41: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/41.jpg)
Java Advanced / Collections Framework 41Georgiy Korneev
Ссылки
JSR 166: Concurrency Utilities // http://jcp.org/en/jsr/detail?id=166
Concurrent Programming with J2SE 5.0 // http://java.sun.com/developer/technicalArticles/J2SE/concurrency/
Getting to know synchronizers http://java.sun.com/developer/JDCTechTips/2005/tt0216.html#1
![Page 42: Concurrency Utilities](https://reader035.vdocuments.us/reader035/viewer/2022062221/568148f7550346895db6193c/html5/thumbnails/42.jpg)
Java Advanced / Collections Framework 42Georgiy Korneev
Вопросы