+ All Categories
Home > Documents > Concurrency Utilities

Concurrency Utilities

Date post: 14-Jan-2016
Category:
Upload: thuy
View: 59 times
Download: 0 times
Share this document with a friend
Description:
Java Advanced. Concurrency Utilities. Содержание. Многопоточные коллекции Примитивы синхронизации Атомарные операции Блокировки Управление заданиями Дополнительные возможности Заключение. Concurrency Utilities. Набор классов, облегчающих написание многопоточных программ - PowerPoint PPT Presentation
Popular Tags:
42
Concurrency Utilities Java Advanced
Transcript
Page 1: Concurrency Utilities

Concurrency UtilitiesJava Advanced

Page 2: Concurrency Utilities

Java Advanced / Concurrency Utilities 2

СПбГУ ИТМО

Georgiy Korneev

Содержание

Многопоточные коллекцииПримитивы синхронизацииАтомарные операцииБлокировкиУправление заданиямиДополнительные возможностиЗаключение

Page 3: Concurrency Utilities

Java Advanced / Concurrency Utilities 3

СПбГУ ИТМО

Georgiy Korneev

Concurrency Utilities

Набор классов, облегчающих написание многопоточных программ

Пакет java.util.concurrent Многопоточные коллекции Примитивы синхронизации Управление заданиями

Пакет java.util.concurrent.locks Работа с блокировками

Пакет java.util.concurrent.atomic Атомарные переменные

Page 4: Concurrency Utilities

Многопоточные коллекции

Часть 1

Page 5: Concurrency Utilities

Java Advanced / Collections Framework 5Georgiy Korneev

Многопоточные очереди

Интерфейс BlockingQueueОтличие от обычных очередей

Возможно ограничение размера Методы добавления могут бросают

IllegalStateException Дополнительные операции

Page 6: Concurrency Utilities

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

Java Advanced / Collections Framework 7Georgiy Korneev

Производитель-потребитель (1)

Производительvoid run() { try { while (true) { E e; // Создание элемента queue.put(e); } } catch (InterruptedException e) { }}

Page 8: Concurrency Utilities

Java Advanced / Collections Framework 8Georgiy Korneev

Производитель-потребитель (2)

Потребительvoid run() {

try {

while (true) {

E e = queue.take();

// Обработка элемента

}

} catch (InterruptedException e) {

}

}

Page 9: Concurrency Utilities

Java Advanced / Collections Framework 9Georgiy Korneev

Реализации BlockingQueue

ArrayBlockingQueue – очередь на массиве LinkedBlockingQueue – очередь на списке

PriorityBlockingQueue – очередь на хипе SynchronousQueue – очередь без

"внутренности"

Page 10: Concurrency Utilities

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

Java Advanced / Collections Framework 11Georgiy Korneev

Другие многопоточные коллекции

Коллекции с многопоточным доступом ConcurrentHashMap – отображение ConcurrentLinkedQueue – очередь на списке

Коллекции, “самокопирующиеся” при записи CopyOnWriteArrayList – список на массиве CopyOnWriteArraySet – множество на массиве

Page 12: Concurrency Utilities

Атомарные операцииЧасть 2

Page 13: Concurrency Utilities

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

Java Advanced / Collections Framework 14Georgiy Korneev

Атомарные переменные

Типы AtomicBoolean AtomicInteger AtomicLong AtomicReference

Операции Обычные

Page 15: Concurrency Utilities

Java Advanced / Collections Framework 15Georgiy Korneev

Атомарные массивы

Типы AtomicIntegerArray AtomicLongArray AtomicReferenceArray

Операции Обычные, с указанием индекса

Page 16: Concurrency Utilities

Java Advanced / Collections Framework 16Georgiy Korneev

Атомарный доступ к полям

Типы AtomicIntegerFieldUpdater AtomicLongFieldUpdater AtomicReferenceFieldUpdater

Операции Обычные, с указанием объекта Создание newUpdater(class, fieldName)

Page 17: Concurrency Utilities

Java Advanced / Collections Framework 17Georgiy Korneev

Помеченные ссылки

Типы AtomicMarkableReference – ссылка помеченная

флажком AtomicStampedReference – ссылка помеченная

числом

Page 18: Concurrency Utilities

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

Примитивы синхронизации

Часть 3

Page 20: Concurrency Utilities

Java Advanced / Collections Framework 20Georgiy Korneev

Примитивы синхронизации

Semaphore – семафорCyclicBarrier – многоразовый барьерCountDownLatch – защелкаExchanger – рандеву

Page 21: Concurrency Utilities

Java Advanced / Collections Framework 21Georgiy Korneev

Семафоры

Семафор имеет емкость, указываемую при создании

Методы acquire(n?) – получить разрешение release(n?) – отдать разрешение tryAquire(n?, time?) – попробовать получить

разрешение reducePermits(n) – уменьшить количество

разрешений drainPermits() – забрать все разрешения статистика

Page 22: Concurrency Utilities

Java Advanced / Collections Framework 22Georgiy Korneev

Барьеры

Количество потоков и действие на барьере указывается при создании

Методы await(time?) – барьер. reset() – возвращает барьер в исходное

состояние isBroken() – “сломан” ли барьер статистика

Page 23: Concurrency Utilities

Java Advanced / Collections Framework 23Georgiy Korneev

Защелки

Высота защелки указывается при созданииМетоды

await(time?) – ждет спуска защелки. countDown() – опускает защелку на единицу. getCount() – текущая высота защелки.

Page 24: Concurrency Utilities

Java Advanced / Collections Framework 24Georgiy Korneev

Рандеву

Позволяет потокам синхронно обмениваться объектами

Методы exchange(V x, time?) – обменяться

Page 25: Concurrency Utilities

БлокировкиЧасть 4

Page 26: Concurrency Utilities

Java Advanced / Collections Framework 26Georgiy Korneev

Блокировки

Интерфейс LockМетоды

lock() – захватить блокировку lockInterruptibly() – захватить блокировку tryLock(time?) – попытаться захватить

блокировку unlock() – отпустить блокировку newCondition() – создать условие

Page 27: Concurrency Utilities

Java Advanced / Collections Framework 27Georgiy Korneev

Условия

Интерфейс Condition await(time?) – ждать условия awaitUntil(deadline) – ждать условия до

времени awaitUninterruptibly() – ждать условие signal() – подать сигнал signalAll() – подать сигнал всем

Page 28: Concurrency Utilities

Java Advanced / Collections Framework 28Georgiy Korneev

Реализация блокировки

Класс ReentrantLockДополнительные методы

isFair() – “честность” блокировки isLocked() – блокировка занята getQueuedThreads() / getQueueLength() /

hasQueuedThread(thread) / hasQueuedThreads() – потоки, ждущие блокировку

getWaitingThreads(condition) / getWaitQueueLength(condition) – потоки, ждущие условие

Page 29: Concurrency Utilities

Java Advanced / Collections Framework 29Georgiy Korneev

Читатели и писатели

Интерфейс ReadWriteLock Методы

readLock() – блокировка для читателей writeLock() – блокировка для писателей

Реализация ReentrantReadWriteLock

Page 30: Concurrency Utilities

Управление заданиямиЧасть 5

Page 31: Concurrency Utilities

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

Java Advanced / Collections Framework 32Georgiy Korneev

Функции и результаты

Интерфейс Callable<V> – функция V call() – подсчитать функцию

Интерфейс Future<V> – результат get(timeout?) – получить результат isDone() – окончено ли выполнение cancel() – прервать выполнение isCancelled() – прервано ли выполнение

Page 33: Concurrency Utilities

Java Advanced / Collections Framework 33Georgiy Korneev

Реализация исполнителей

Класс ThreadPoolExecutor corePoolSize – минимальное количество

потоков maxPoolSize максимальное количество

потоков blockingQueue – очередь заданий keepAliveTime – время жизни потока threadFactory – фабрика потоков …

Page 34: Concurrency Utilities

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

Java Advanced / Collections Framework 35Georgiy Korneev

Реализация отложенного исполнения

Класс ScheduledThreadPoolExecutor

Page 36: Concurrency Utilities

Java Advanced / Collections Framework 36Georgiy Korneev

Класс Executors

Создание привилегированных Callable Создание фабрик потоковСоздание фабрик привилегированных

потоковСоздание исполнителей с заданным

числом потоковСоздание исполнителей с неограниченным

числом потоков

Page 37: Concurrency Utilities

Дополнительные возможности

Часть 6

Page 38: Concurrency Utilities

Java Advanced / Collections Framework 38Georgiy Korneev

Интервалы времени

Перечисление TimeUnit SECONDS MILLISECONDS MICROSECONDS NANOSECONDS

Интервалы задаются парой Значение Единица измерения

Page 39: Concurrency Utilities

Java Advanced / Collections Framework 39Georgiy Korneev

Очереди с задержкой

Класс DelayQueueИнтерфейс Delayed

getDelay(unit) – получить остаток задержки

Page 40: Concurrency Utilities

ЗаключениеЧасть 7

Page 41: Concurrency Utilities

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

Java Advanced / Collections Framework 42Georgiy Korneev

Вопросы


Recommended