Многопоточное программирование на Java Java Advanced

Презентация:



Advertisements
Похожие презентации
Многопоточное программирование на Java Java Advanced.
Advertisements

Многопоточное программирование на Java Java Advanced.
Асинхронное взаимодействие Java Execution Framework Сравнение производительности Асинхронные вызовы в Glassfish Кислин Григорий.
Задачи и средства многопоточного программирования Java Advanced
Хранение данных (1) Для того, чтобы выяснить, откуда берутся гонки данных, нужно разобраться в том, как обеспечивается хранение данных приложения и его.
§68 Лучше executors and tasks, чем потоки. Executor framework - 1.5, java.util.concurrent –выключить (.shutdown() ) –ждать пока не выполнится один или.
Многопоточное программирование Java Advanced. 2Georgiy Korneev Краткое содержание 1.Введение 2.Классические задачи многопоточного программирования 3.Атомарные.
Java Advanced XML Transformations 1.0 (XSLT 1.0).
Типовые расчёты Растворы
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Школьная форма Презентация для родительского собрания.
Michael Jackson

Usage java.util.concurrence in Java For students of universities Author: Oxana Dudnik.
Введение в многопоточное программирование Java Advanced
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Г. Москва, тел.: +7 (495) , Internet: Слайды курса «Администрирование работы на сервере.
Маршрутный лист «Числа до 100» ? ? ?

Транксрипт:

Многопоточное программирование на Java Java Advanced

2 СПбГУ ИТМО Georgiy KorneevJava Advanced / Многопоточное программирование на Java Содержание 1. Многопоточные коллекции 2. Управление заданиями 3. Уровни безопасности 4. Дополнительные возможности

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

Многопоточные коллекции Часть 1 Java Advanced / Многопоточное программирование на Java

5Georgiy Korneev Многопоточные очереди Интерфейсы BlockingQueue BlockingDeque Семантика чтения-записи Возможно ограничение размера Java Advanced / Многопоточное программирование на Java ДействиеИсклю- чение ЗначениеОжидание Вставкаadd(e)offer(е, time?)put(e) Чтениеelement()peek() Удалениеremove()poll(time?)take(e)

6Georgiy KorneevJava Advanced / Многопоточное программирование на Java Свойства Массовые операции remainingCapacity() – свободное место drainTo(Collection) – получение всех элементов drainTo(Collection, max) – получение max элементов Особенности Неэффективность произвольного доступа Неатомарность массовых операций

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

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

9Georgiy KorneevJava Advanced / Многопоточное программирование на Java Реализации BlockingQueue ArrayBlockingQueue – очередь на массиве LinkedBlockingQueue/Deque – очереди на списках PriorityBlockingQueue – очередь на хипе SynchronousQueue – очередь без «внутренности»

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

11Georgiy Korneev Многопоточные отображения (2) Класс ConcurrentHashMap Неблокирующее чтение Частично блокирующая запись Lock striping Java Advanced / Многопоточное программирование на Java

12Georgiy KorneevJava Advanced / Многопоточное программирование на Java Другие многопоточные коллекции Коллекции с многопоточным доступом ConcurrentLinkedQueue – очередь на списке ConcurrentSkipListSet/Map – упорядоченное множество/отображение Коллекции, «самокопирующиеся» при записи CopyOnWriteArrayList – список на массиве CopyOnWriteArraySet – множество на массиве

Управление заданиями Часть 2 Java Advanced / Многопоточное программирование на Java

14Georgiy KorneevJava Advanced / Многопоточное программирование на Java Исполнители (1) Интерфейс Executor execute(Runnable) – выполнить задание Возможные варианты выполнения В том же потоке Во вновь создаваемом потоке Пул потоков Наращиваемый пул потоков

15Georgiy KorneevJava Advanced / Многопоточное программирование на Java Функции и результаты Интерфейс Callable – функция V call() – подсчитать функцию Интерфейс Future – результат get(timeout?) – получить результат isDone() – окончено ли выполнение cancel(mayInterruptWhenRunning) – прервать выполнение isCancelled() – прервано ли выполнение

16Georgiy KorneevJava Advanced / Многопоточное программирование на Java Исполнители (2) Интерфейс ExecutorService submit(Runnable) – выполнить задание Future submit(Callable ) – выполнить функцию List invokeAll(List ) – выполнить все функции Future invokeAny(List ) – успешно выполнить функцию

17Georgiy Korneev Завершение работы shutdown() – прекратить прием заданий List shutdownNow() – прекратить выполнение isShutdown() – прекращен ли прием isTerminated() – окончен ли все задания awaitTermination(timeout) – ожидание завершения Java Advanced / Многопоточное программирование на Java

18Georgiy KorneevJava Advanced / Многопоточное программирование на Java Реализация исполнителей Класс ThreadPoolExecutor corePoolSize – минимальное количество потоков maxPoolSize максимальное количество потоков blockingQueue – очередь заданий keepAliveTime – время жизни потока threadFactory – фабрика потоков …

19Georgiy Korneev Отклонение заданий Нет свободного потока и места в очереди Политики отклонения AbortPolicy – бросить RejectedExecutionException CallerRunsPolicy – исполнить в вызывающем потоке DiscardPolicy – проигноировать DiscardOldestPolicy – заменить самое давнее Интерфейс RejectedExecutionHandler Java Advanced / Многопоточное программирование на Java

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

21Georgiy KorneevJava Advanced / Многопоточное программирование на Java Реализация отложенного исполнения Класс ScheduledThreadPoolExecutor

22Georgiy KorneevJava Advanced / Многопоточное программирование на Java Класс Executors Создание исполнителей newCachedThreadPool() newFixedThreadPool(n) newSingleThreadExecutor() Создание фабрик потоков Класс ThreadFactory Создание привилегированных действий и фабрик потоков Наследую права создавшего

Уровни безопасности Часть 3 Java Advanced / Многопоточное программирование на Java

24Georgiy Korneev Неизменяемые Не изменяются с момента создания Все поля final Ссылаются только на неизменяемые объекты Потокобезопасны Синхронизация не требуется Immutable Java Advanced / Многопоточное программирование на Java

25Georgiy Korneev Эффективно неизменяемые Не изменяются с определенного момента Вся инициализация в одном потоке Ссылаются только на (эффективно) неизменяемые объекты Потокобезопасны Корректно опубликованы Effective immutable Java Advanced / Многопоточное программирование на Java

26Georgiy Korneev Корректная публикация Корректное получение ссылки на объект Полностью инициализирован Опубликован с барьером Получен с барьером Ссылки до окончания конструктора Переопределяемые методы Регистрация слушателей Java Advanced / Многопоточное программирование на Java

27Georgiy Korneev Потокобезопасные Внутренняя синхронизация Для одиночных операций синхронизация не требуется Внешняя синхронизация при массовых операциях Thread-safe Java Advanced / Многопоточное программирование на Java

28Georgiy Korneev Условно потокобезопасные Внешняя синхронизация Синхронизация требуется для всех операций Ответственность на вызывающем Conditionally thread-safe Java Advanced / Многопоточное программирование на Java

29Georgiy Korneev Потоконебезопасные Не могут использоваться в многопоточной среде Патологический случай Надо избегать Thread-hostile Java Advanced / Многопоточное программирование на Java

30Georgiy Korneev Делегирование Одно поле Ссылка не изменяется Потокобезопасный объект Атомарные или независимые операции Можно делегировать всю синхронизацию Java Advanced / Многопоточное программирование на Java

31Georgiy Korneev Привязка к потоку Один поток – один экземпляр Thead-local objects Проблемы с взаимодействием Java Advanced / Многопоточное программирование на Java

32Georgiy Korneev Thread-local objects Существует по одному на каждый поток Каждый может использовать безопасно Доступ Идентификатор Чтение локального объекта Запись локального объекта Java Advanced / Многопоточное программирование на Java

33Georgiy Korneev Класс ThreadLocal Конструкторы TheadLocal() – новый идентификатор Методы get() – чтение set(value) – запись remove() – удаление Наследование initialValue() – исходное значение Java Advanced / Многопоточное программирование на Java

Дополнительные возможности Часть 4 Java Advanced / Многопоточное программирование на Java

35Georgiy KorneevJava Advanced / Многопоточное программирование на Java Интервалы времени Перечисление TimeUnit SECONDS MILLISECONDS MICROSECONDS NANOSECONDS Интервалы задаются парой Значение Единица измерения

36Georgiy KorneevJava Advanced / Многопоточное программирование на Java Очереди с задержкой Класс DelayQueue Интерфейс Delayed getDelay(unit) – получить остаток задержки

37Georgiy Korneev Асинхронное вычисление Класс FutureTask Методы run() – посчитать get(timeout?) – получить результат isDone() – проверить завершение cancel() – отменить isCancelled() – проверить, что отменилось Java Advanced / Многопоточное программирование на Java

38Georgiy Korneev Очереди заданий Интерфейс CompletionService Методы submit(Callable) / submit(Runnable, result) – создать задание poll(timeout?) / take() – получить результат задания Реализация ExecutorCompletionService Java Advanced / Многопоточное программирование на Java

Заключение Часть 7 Java Advanced / Многопоточное программирование на Java

40Georgiy KorneevJava Advanced / Многопоточное программирование на Java Ссылки JSR 166: Concurrency Utilities // Concurrent Programming with J2SE 5.0 // s/J2SE/concurrency/ s/J2SE/concurrency/ Getting to know synchronizers 005/tt0216.html# /tt0216.html#1

41Georgiy KorneevJava Advanced / Многопоточное программирование на Java Вопросы