1 / 42

Concurrency Utilities

Java Advanced. Concurrency Utilities. Содержание. Многопоточные коллекции Примитивы синхронизации Атомарные операции Блокировки Управление заданиями Дополнительные возможности Заключение. Concurrency Utilities. Набор классов, облегчающих написание многопоточных программ

thuy
Télécharger la présentation

Concurrency Utilities

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Advanced Concurrency Utilities

  2. Содержание • Многопоточные коллекции • Примитивы синхронизации • Атомарные операции • Блокировки • Управление заданиями • Дополнительные возможности • Заключение Java Advanced / Concurrency Utilities

  3. Concurrency Utilities • Набор классов, облегчающих написание многопоточных программ • Пакет java.util.concurrent • Многопоточные коллекции • Примитивы синхронизации • Управление заданиями • Пакет java.util.concurrent.locks • Работа с блокировками • Пакет java.util.concurrent.atomic • Атомарные переменные Java Advanced / Concurrency Utilities

  4. Часть 1 Многопоточные коллекции

  5. Многопоточные очереди • Интерфейс BlockingQueue • Отличие от обычных очередей • Возможно ограничение размера • Методы добавления могут бросают IllegalStateException • Дополнительные операции Java Advanced / Collections Framework

  6. Дополнительные операции • Добавление элемента • put(E) – блокируется до появление места. • offer(E, timeout, unit) – блокируется на время. • Удаление элемента • take() – блокируется до появления элемента. • poll(E, timeout, unit) – блокируется на время. • Получение нескольких элементов • drainTo(Collection) – получение всех элементов. • drainTo(Collection, max) – получение max элементов. Java Advanced / Collections Framework

  7. Производитель-потребитель (1) • Производитель void run() { try { while (true) { E e; // Создание элемента queue.put(e); } } catch (InterruptedException e) { } } Java Advanced / Collections Framework

  8. Производитель-потребитель (2) • Потребитель void run() { try { while (true) { E e = queue.take(); // Обработка элемента } } catch (InterruptedException e) { } } Java Advanced / Collections Framework

  9. Реализации BlockingQueue • ArrayBlockingQueue – очередь на массиве • LinkedBlockingQueue – очередь на списке • PriorityBlockingQueue – очередь на хипе • SynchronousQueue – очередь без "внутренности" Java Advanced / Collections Framework

  10. Многопоточные отображения • Представляются интерфейсом ConcurrentMap<K, V> • Дополнительные методы • putIfAbsent(K, V) – добавляет отображение K, если его ранее не было • remove(K, V) – удаляет K, если он отображен на V • replace(K, V) – заменяет отображение K • replace(K, oldV, newV) – условная замена отображения для ключа K Java Advanced / Collections Framework

  11. Другие многопоточные коллекции • Коллекции с многопоточным доступом • ConcurrentHashMap – отображение • ConcurrentLinkedQueue – очередь на списке • Коллекции, “самокопирующиеся” призаписи • CopyOnWriteArrayList – список на массиве • CopyOnWriteArraySet – множество на массиве Java Advanced / Collections Framework

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

  13. Атомарные операции • Общие операции • get() – атомарное чтение • set(value) – атомарная запись • compareAndSet(expected, value) – сравнение и запись • weakCompareAndSet(expected, value) – слабое сравнение и запись • Операции над числами • addAndGet() / getAndAdd() • getAndIncrement() / incrementAndGet() • getAndDecrement() / decrementAndGet() Java Advanced / Collections Framework

  14. Атомарные переменные • Типы • AtomicBoolean • AtomicInteger • AtomicLong • AtomicReference • Операции • Обычные Java Advanced / Collections Framework

  15. Атомарные массивы • Типы • AtomicIntegerArray • AtomicLongArray • AtomicReferenceArray • Операции • Обычные, с указанием индекса Java Advanced / Collections Framework

  16. Атомарный доступ к полям • Типы • AtomicIntegerFieldUpdater • AtomicLongFieldUpdater • AtomicReferenceFieldUpdater • Операции • Обычные, с указанием объекта • СозданиеnewUpdater(class, fieldName) Java Advanced / Collections Framework

  17. Помеченные ссылки • Типы • AtomicMarkableReference – ссылка помеченная флажком • AtomicStampedReference – ссылка помеченная числом Java Advanced / Collections Framework

  18. Операции с помеченными ссылками • Чтения • getReference() – прочитать ссылку • getX() – прочитать пометку • V get(X[] holder) – прочитать ссылку и пометку • Установки • set(valueV, valueX) – установить пометку и значение. • attemptX(oldX, newX) – изменить пометку • Условной установки • compareAndSet(oldV, newV, oldX, newX) Java Advanced / Collections Framework

  19. Часть 3 Примитивы синхронизации

  20. Примитивы синхронизации • Semaphore – семафор • CyclicBarrier – многоразовый барьер • CountDownLatch – защелка • Exchanger – рандеву Java Advanced / Collections Framework

  21. Семафоры • Семафор имеет емкость, указываемую при создании • Методы • acquire(n?) – получить разрешение • release(n?) – отдать разрешение • tryAquire(n?, time?) – попробовать получить разрешение • reducePermits(n) – уменьшить количество разрешений • drainPermits() – забрать все разрешения • статистика Java Advanced / Collections Framework

  22. Барьеры • Количество потоков и действие на барьере указывается при создании • Методы • await(time?) – барьер. • reset() – возвращает барьер в исходное состояние • isBroken() – “сломан” ли барьер • статистика Java Advanced / Collections Framework

  23. Защелки • Высота защелки указывается при создании • Методы • await(time?) – ждет спуска защелки. • countDown() – опускает защелку на единицу. • getCount() – текущая высота защелки. Java Advanced / Collections Framework

  24. Рандеву • Позволяет потокам синхронно обмениваться объектами • Методы • exchange(V x, time?) – обменяться Java Advanced / Collections Framework

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

  26. Блокировки • Интерфейс Lock • Методы • lock() – захватить блокировку • lockInterruptibly() – захватить блокировку • tryLock(time?) – попытаться захватить блокировку • unlock() – отпустить блокировку • newCondition() – создать условие Java Advanced / Collections Framework

  27. Условия • Интерфейс Condition • await(time?)– ждать условия • awaitUntil(deadline) – ждать условия до времени • awaitUninterruptibly() – ждать условие • signal() – подать сигнал • signalAll() – подать сигнал всем Java Advanced / Collections Framework

  28. Реализация блокировки • Класс ReentrantLock • Дополнительные методы • isFair() – “честность” блокировки • isLocked() – блокировка занята • getQueuedThreads() / getQueueLength()/ hasQueuedThread(thread)/ hasQueuedThreads()– потоки, ждущие блокировку • getWaitingThreads(condition) / getWaitQueueLength(condition) – потоки, ждущие условие Java Advanced / Collections Framework

  29. Читатели и писатели • Интерфейс ReadWriteLock • Методы • readLock() – блокировка для читателей • writeLock() – блокировка для писателей • Реализация ReentrantReadWriteLock Java Advanced / Collections Framework

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

  31. Исполнители • Интерфейс Executor • execute(Runnable) – выполнить задание • Интерфейс ExecutorService • submit(Runnable) – выполнить задание • Future<V> submit(Callable<V>) – выполнить функцию • invokeAll(List<Callable>) – выполнить все функции • invokeAny(List<Callable>) – успешно выполнить функцию Java Advanced / Collections Framework

  32. Функции и результаты • Интерфейс Callable<V> – функция • V call() – подсчитать функцию • Интерфейс Future<V> – результат • get(timeout?) – получить результат • isDone() – окончено ли выполнение • cancel() – прервать выполнение • isCancelled() – прервано ли выполнение Java Advanced / Collections Framework

  33. Реализация исполнителей • Класс ThreadPoolExecutor • corePoolSize – минимальное количество потоков • maxPoolSize максимальное количество потоков • blockingQueue – очередь заданий • keepAliveTime – время жизни потока • threadFactory – фабрика потоков • … Java Advanced / Collections Framework

  34. Отложенное исполнение • Интерфейс ScheduledExecutorService • schedule(callable, timeout) – исполнить через timeout • schedule(runnable, timeout?) – исполнить через timeout • sheduleAtFixedRate(runnable, initialDelay, period, unit) – периодическое исполнение • scheduleWithFixedDelay(runnable, initialDelay, delay, unit)– исполнение с равными интервалами • Все методы возвращают ScheduledFuture Java Advanced / Collections Framework

  35. Реализация отложенного исполнения • Класс ScheduledThreadPoolExecutor Java Advanced / Collections Framework

  36. Класс Executors • Создание привилегированных Callable • Создание фабрик потоков • Создание фабрик привилегированных потоков • Создание исполнителей с заданным числом потоков • Создание исполнителей с неограниченным числом потоков Java Advanced / Collections Framework

  37. Часть 6 Дополнительные возможности

  38. Интервалы времени • Перечисление TimeUnit • SECONDS • MILLISECONDS • MICROSECONDS • NANOSECONDS • Интервалы задаются парой • Значение • Единица измерения Java Advanced / Collections Framework

  39. Очереди с задержкой • Класс DelayQueue • Интерфейс Delayed • getDelay(unit) – получить остаток задержки Java Advanced / Collections Framework

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

  41. Ссылки • 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 Java Advanced / Collections Framework

  42. Вопросы Java Advanced / Collections Framework

More Related