Многопоточное программирование на Java презентация

Содержание


Презентации» Образование» Многопоточное программирование на Java
Многопоточное программирование на Java
 Java AdvancedСодержание
 Потоки
 Блокировки (синхронизация)
 Мониторы и условия
 Модель памяти Java
 Примеры
Потоки
 Часть 1Создание потоков
 Класс Thread – поток
 Позволяет создавать потоки и производитьСоздание потока (Runnable)
 Пример кода
 // Создание потока
 Thread t =Создание потока (Thread)
 Не рекомендуется использовать
 Пример кода
 // Создание потока
Состояния потока
 Состояние потока возвращается методами int getState() и boolean isAlive()Свойства потока
 Основные свойства
 id – идентификатор потока
 name – имяВзаимодействие потоков
 Создание потока
 Запуск потока
 Ожидание окончания потока
 Прерывание потокаОжидание окончания потока
 Методы класса Thread
 join() – ожидать до завершения
Прерывание потока
 Методы класса Thread
 interrupt() – установить флаг прерывания
 isInterrupted()Дополнительные методы
 Приостановка выполнения
 sleep(time) – приостановить поток на время
 yield()Блокировки (синхронизация)
 Часть 2Общий случай
 Любой объект может служить блокировкой
 Снятие блокировки производится автоматически
Методы экземпляра
 Метод экземпляра может быть объявлен синхронизованным
 public synchronized intПроизводитель-потребитель (1)
 Класс данных
 class Data {
   private ObjectПроизводитель-потребитель (2)
 Установка значения
  public void set(Object data) { Производитель-потребитель (3)
 Получение значения
  public Object get() {  Мониторы (условия)
 Часть 3Монитор
 Любой объект может быть монитором
 Для взаимодействия с монитором потокМониторы и блокировки
 При ожидании монитора блокировка с него снимается
 ПриПроизводитель-потребитель (2)
 Установка значения
 public synchronized void set(Object data) 
 Производитель-потребитель (3)
 Получение значения
 public synchronized Object get() 
  Модель памяти Java
 Часть 3Основные свойства
 Атомарность
 Видимость
 УпорядоченностьАтомарность
 Атомарная операция выполняется как единое целое
 Операции над всеми типамиПример
 int a = 0;
 long b = 0;
 a =Видимость
 Изменения произведенные потоком 1 видимы потоком 2
 Видимость гарантируется вПример
 int a = 0;
 int b = 0;
 a =Упорядоченность
 Программы выполняются как если бы они были написаны последовательно
 СПример
 int a = 0;
 a = 1;
 a = 2;Volatile-переменные
 Операции с volatile-переменными всегда атомарны
 При чтение значения volatile-переменной оноПример
 volatile List l = null;
 t1() {
   ListВыводы
 При отсутствии правильной синхронизации потоки могут увидеть практически что угодноПримеры
 Часть 4Барьер
 public await(Barrier that) { // 0
   synchronized (this)Диаграмма переходов для барьераГарантированный deadlock
 public void run() { // 0
   synchronizedДиаграмма переходов для deadlockЗаключение
 Часть 6Выводы
 Программы должны быть хорошо синхронизированы
 Недосинхронизированные программы могут вести себяСсылки
 JLS. Threads and Locks // http://java.sun.com/docs/books/jls/third_edition/html/memory.html
 Threads: Doing Two orВопросы



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Многопоточное программирование на Java Java Advanced


Слайд 2
Описание слайда:
Содержание Потоки Блокировки (синхронизация) Мониторы и условия Модель памяти Java Примеры Заключение

Слайд 3
Описание слайда:
Потоки Часть 1

Слайд 4
Описание слайда:
Создание потоков Класс Thread – поток Позволяет создавать потоки и производить операции с ними Интерфейс Runnable – сущность, которая может быть запущена public void run();

Слайд 5
Описание слайда:
Создание потока (Runnable) Пример кода // Создание потока Thread t = new Thread(new Runnable() { public void run() { System.out.println("Hello"); } }); // Запуск потока t.start();

Слайд 6
Описание слайда:
Создание потока (Thread) Не рекомендуется использовать Пример кода // Создание потока Thread t = new Thread() { public void run() { System.out.println("Hello"); } }; // Запуск потока t.start();

Слайд 7
Описание слайда:
Состояния потока Состояние потока возвращается методами int getState() и boolean isAlive() класса Thread

Слайд 8
Описание слайда:
Свойства потока Основные свойства id – идентификатор потока name – имя потока priority – приоритет daemon – поток-демон Свойства потока не могут изменяться после запуска

Слайд 9
Описание слайда:
Взаимодействие потоков Создание потока Запуск потока Ожидание окончания потока Прерывание потока

Слайд 10
Описание слайда:
Ожидание окончания потока Методы класса Thread join() – ожидать до завершения join(long millis) – ожидать до завершения или истечения millis миллисекунд join(long millis, long nanos) – ожидать до завершения или истечения millis миллисекунд и nanos миллисекунд Все методы ожидания кидают InterruptedExcepton

Слайд 11
Описание слайда:
Прерывание потока Методы класса Thread interrupt() – установить флаг прерывания isInterrupted() – проверить флаг прерывания interrupted() – проверить и сбросить флаг прерывания Методы, которые ожидают в процессе выполнения должны бросать InterruptedException

Слайд 12
Описание слайда:
Дополнительные методы Приостановка выполнения sleep(time) – приостановить поток на время yield() – позволить выполниться другим потокам Получение текущего потока currentThread()

Слайд 13
Описание слайда:
Блокировки (синхронизация) Часть 2

Слайд 14
Описание слайда:
Общий случай Любой объект может служить блокировкой Снятие блокировки производится автоматически Синтаксис synchronized (o) { // Получение блокировки … } // Снятие блокировки

Слайд 15
Описание слайда:
Методы экземпляра Метод экземпляра может быть объявлен синхронизованным public synchronized int getValue() { … } Эквивалентно public int getValue() { synchronized (this) { … } }

Слайд 16
Описание слайда:
Производитель-потребитель (1) Класс данных class Data { private Object data; public void set(Object data) { … } public Object get() { … } }

Слайд 17
Описание слайда:
Производитель-потребитель (2) Установка значения public void set(Object data) { while (true) { synchronized (this) { if (data == null) { this.data = data; break; } } } }

Слайд 18
Описание слайда:
Производитель-потребитель (3) Получение значения public Object get() { while (true) { synchronized (this) { if (data != null) { Object d = data; data = null; return d; } } } }

Слайд 19
Описание слайда:
Мониторы (условия) Часть 3

Слайд 20
Описание слайда:
Монитор Любой объект может быть монитором Для взаимодействия с монитором поток должен иметь блокировку на него Методы монитора wait(time?) – ожидание монитора notify() – извещение одного из ждущих потоков notifyAll() – извещение всех ждущих потоков

Слайд 21
Описание слайда:
Мониторы и блокировки При ожидании монитора блокировка с него снимается При извещении поток не получает управления пока не может получить блокировку обратно Псевдокод monitor.unlock() monitor.await() monitor.lock()

Слайд 22
Описание слайда:
Производитель-потребитель (2) Установка значения public synchronized void set(Object data) throws InterruptedException { while (data != null) wait(); this.data = data; notify(); }

Слайд 23
Описание слайда:
Производитель-потребитель (3) Получение значения public synchronized Object get() throws InterruptedException { while (data == null) wait(); Object d = data; data = null; notify(); return d; }

Слайд 24
Описание слайда:
Модель памяти Java Часть 3

Слайд 25
Описание слайда:
Основные свойства Атомарность Видимость Упорядоченность

Слайд 26
Описание слайда:
Атомарность Атомарная операция выполняется как единое целое Операции над всеми типами кроме long и double являются атомарными

Слайд 27
Описание слайда:
Пример int a = 0; long b = 0; a = 1; b = -1;

Слайд 28
Описание слайда:
Видимость Изменения произведенные потоком 1 видимы потоком 2 Видимость гарантируется в следующих случаях После изменений поток 1 освободил блокировку, которую захватил поток 2 После изменения поток 1 создал поток 2 Поток 2 дождался окончания потока 1 При неправильной синхронизации изменения могут быть видимы в произвольном порядке

Слайд 29
Описание слайда:
Пример int a = 0; int b = 0; a = 1; b = 2;

Слайд 30
Описание слайда:
Упорядоченность Программы выполняются как если бы они были написаны последовательно С точки зрения других потоков выполнение программы может производиться в произвольном порядке

Слайд 31
Описание слайда:
Пример int a = 0; a = 1; a = 2;

Слайд 32
Описание слайда:
Volatile-переменные Операции с volatile-переменными всегда атомарны При чтение значения volatile-переменной оно всегда читается из общей памяти При записи значения volatile-переменной оно всегда записывается в общую память Если volatile-ссылка изменилась, то данные доступные по ней могли не измениться

Слайд 33
Описание слайда:
Пример volatile List l = null; t1() { List l = new ArrayList(); l.add(new Object()); this.l = l; }

Слайд 34
Описание слайда:
Выводы При отсутствии правильной синхронизации потоки могут увидеть практически что угодно

Слайд 35
Описание слайда:
Примеры Часть 4

Слайд 36
Описание слайда:
Барьер public await(Barrier that) { // 0 synchronized (this) { // 1 this.generation++; // 2 this.notify(); // 3 } // 4 synchronized (that) { // 5 while (this.generation != that.generation) { // 6 that.wait(); // unlock 7, await 8, lock 9 } // 10 } // 11 }

Слайд 37
Описание слайда:
Диаграмма переходов для барьера

Слайд 38
Описание слайда:
Гарантированный deadlock public void run() { // 0 synchronized (o1) { // 1 o1.notifyAll(); // 2 synchronized (o2) { // 3 try { o2.wait(); // unlock 4, await 5, lock 6 } catch (InterruptedException e) {} } // 7 } // 8 }

Слайд 39
Описание слайда:
Диаграмма переходов для deadlock

Слайд 40
Описание слайда:
Заключение Часть 6

Слайд 41
Описание слайда:
Выводы Программы должны быть хорошо синхронизированы Недосинхронизированные программы могут вести себя практически как угодно Пересенхронизированные программы часто страдают deadlock’ами

Слайд 42
Описание слайда:
Ссылки JLS. Threads and Locks // http://java.sun.com/docs/books/jls/third_edition/html/memory.html Threads: Doing Two or More Tasks At Once (Java Tutorial) // http://java.sun.com/docs/books/tutorial/essential/threads/index.html

Слайд 43
Описание слайда:
Вопросы


Скачать презентацию на тему Многопоточное программирование на Java можно ниже:

Похожие презентации