SlideShare a Scribd company logo
1 of 25
Download to read offline
Многопоточность в Java: основы
Алексей Владыкин
17 ноября 2014
Алексей Владыкин Многопоточность (1) 17 ноября 2014 1 / 24
1 Общие сведения о параллелизме
2 Управление потоками
3 Синхронизация потоков
4 Модель памяти
Алексей Владыкин Многопоточность (1) 17 ноября 2014 2 / 24
Общие сведения о параллелизме
Алексей Владыкин Многопоточность (1) 17 ноября 2014 3 / 24
Общие сведения о параллелизме
Мотивация
Одновременное выполнение нескольких действий
(например, отрисовка пользовательского интерфейса и передача
файлов по сети)
Ускорение вычислений
(при наличии нескольких вычислительных ядер)
Алексей Владыкин Многопоточность (1) 17 ноября 2014 4 / 24
Общие сведения о параллелизме
Закон Амдала
S(N) =
1
(1 − P) + P
N
S — ускорение (speedup)
P — доля вычислений, которые возможно распараллелить
N — количество вычислительных ядер
Алексей Владыкин Многопоточность (1) 17 ноября 2014 5 / 24
Общие сведения о параллелизме
Параллелизм в Java
Запуск нескольких JVM на одном или на разных компьютерах
Нет общей памяти
Взаимодействие через файловую систему или сетевое соединение
Алексей Владыкин Многопоточность (1) 17 ноября 2014 6 / 24
Общие сведения о параллелизме
Параллелизм в Java
Запуск нескольких JVM на одном или на разных компьютерах
Нет общей памяти
Взаимодействие через файловую систему или сетевое соединение
Запуск нескольких потоков внутри JVM
Есть общая память
Обширная поддержка в языке и стандартной библиотеке
Алексей Владыкин Многопоточность (1) 17 ноября 2014 6 / 24
Общие сведения о параллелизме
Проблемы параллельных программ
Гонка (race condition)
Взаимная блокировка (deadlock)
Алексей Владыкин Многопоточность (1) 17 ноября 2014 7 / 24
Управление потоками
Алексей Владыкин Многопоточность (1) 17 ноября 2014 8 / 24
Управление потоками
java.lang.Thread
Потоки представлены экземплярами класса java.lang.Thread
String getName()
long getId()
boolean isDaemon()
StackTraceElement[] getStackTrace()
ThreadGroup getThreadGroup()
Алексей Владыкин Многопоточность (1) 17 ноября 2014 9 / 24
Управление потоками
Thread dump
Список всех потоков с их состояниями и stack trace’ами
Ctrl+Break или Ctrl+
jps -l, затем jstack PID
Кнопка в IDE
Алексей Владыкин Многопоточность (1) 17 ноября 2014 10 / 24
Управление потоками
Создание потока: подкласс Thread
Thread thread = new Thread () {
@Override
public void run() {
// do some work
}
}
Алексей Владыкин Многопоточность (1) 17 ноября 2014 11 / 24
Управление потоками
Создание потока: Runnable
Runnable runnable = new Runnable () {
@Override
public void run() {
// do some work
}
};
Thread thread = new Thread(runnable );
Алексей Владыкин Многопоточность (1) 17 ноября 2014 12 / 24
Управление потоками
Жизненный цикл потока
Создание объекта Thread
Запуск
thread.start()
Работа
выполняется метод run(), thread.isAlive() == true
Завершение
метод run() закончился или бросил исключение
Завершенный поток нельзя перезапустить
Алексей Владыкин Многопоточность (1) 17 ноября 2014 13 / 24
Управление потоками
Прерывание потока
thread.interrupt()
Если поток находится в ожидании (sleep, join, wait), то
ожидание прерывается исключением InterruptedException
Иначе у потока просто устанавливается флаг interrupted
флаг проверяется методами interrupted() и isInterrupted()
проверять флаг и завершать поток надо самостоятельно
thread.join()
Алексей Владыкин Многопоточность (1) 17 ноября 2014 14 / 24
Синхронизация потоков
Алексей Владыкин Многопоточность (1) 17 ноября 2014 15 / 24
Синхронизация потоков
Возможности встроенной синхронизации
Взаимное исключение
(пока один поток что-то делает, другие не могут ему помешать)
Ожидание и уведомление
(поток ожидает уведомлений от других потоков)
Алексей Владыкин Многопоточность (1) 17 ноября 2014 16 / 24
Синхронизация потоков
Ключевое слово synchronized
Синхронизованный метод
public synchronized void doSomething () {
// ...
}
Синхронизованный блок внутри метода
public void doSomething () {
synchronized (obj) {
// ...
}
}
Алексей Владыкин Многопоточность (1) 17 ноября 2014 17 / 24
Синхронизация потоков
Ключевое слово synchronized
Синхронизация блоков — по монитору указанного объекта
Синхронизация методов — по монитору текущего объекта (this)
Синхронизация статических методов — по монитору класса
Алексей Владыкин Многопоточность (1) 17 ноября 2014 18 / 24
Синхронизация потоков
Ожидание и уведомления
Допустимо только внутри synchronized
void wait()
void wait(long millis)
void wait(long millis, int nanos)
void notify()
void notifyAll()
Алексей Владыкин Многопоточность (1) 17 ноября 2014 19 / 24
Модель памяти
Алексей Владыкин Многопоточность (1) 17 ноября 2014 20 / 24
Модель памяти
Атомарность
Чтение и запись полей всех типов, кроме long и double,
происходит атомарно
Если поле объявлено с модификатором volatile, то атомарно
читаются и пишутся даже long и double
Алексей Владыкин Многопоточность (1) 17 ноября 2014 21 / 24
Модель памяти
Видимость
Изменения значений полей, сделанные одним потоком, могут
быть не видны в другом потоке
Изменения, сделанные одним потоком, могут быть видны в
другом потоке в ином порядке
Правила формализованы при помощи отношения happens-before
Семантика final
Алексей Владыкин Многопоточность (1) 17 ноября 2014 22 / 24
Модель памяти
happens-before
Запись volatile-поля happens-before чтения этого поля
Освобождение монитора happens-before захват того же
монитора
thread.start() happens-before thread.run()
Завершение thread.run() happens-before выход из
thread.join()
. . .
Алексей Владыкин Многопоточность (1) 17 ноября 2014 23 / 24
Что сегодня узнали
Какие бывают виды параллелизма и как они поддерживаются в
Java
Как в Java запускать и останавливать потоки
Какие в Java есть встроенные в язык средства синхронизации
потоков
Что такое Java Memory Model
Алексей Владыкин Многопоточность (1) 17 ноября 2014 24 / 24

More Related Content

What's hot

C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуCEE-SEC(R)
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построенияGennady Zavyalov
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRAMBLER&Co
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actualYevgen Levik
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
Фреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в ЯндексеФреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в ЯндексеVadim Tsesko
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовtvaleev
 
Multiprocessor Programming Intro (lecture 3)
Multiprocessor Programming Intro (lecture 3)Multiprocessor Programming Intro (lecture 3)
Multiprocessor Programming Intro (lecture 3)Dmitry Tsitelov
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 

What's hot (20)

C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на Swift
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actual
 
Java threads - part 3
Java threads - part 3Java threads - part 3
Java threads - part 3
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
Java threads - part 1
Java threads - part 1Java threads - part 1
Java threads - part 1
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
Фреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в ЯндексеФреймворк Akka и его использование в Яндексе
Фреймворк Akka и его использование в Яндексе
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководов
 
Multiprocessor Programming Intro (lecture 3)
Multiprocessor Programming Intro (lecture 3)Multiprocessor Programming Intro (lecture 3)
Multiprocessor Programming Intro (lecture 3)
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 

Viewers also liked

08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутриRoman Brovko
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программRoman Brovko
 
04 - Java. Обработка ошибок, исключения, отладка
04 - Java. Обработка ошибок, исключения, отладка04 - Java. Обработка ошибок, исключения, отладка
04 - Java. Обработка ошибок, исключения, отладкаRoman Brovko
 
02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис JavaRoman Brovko
 
03 - Java. Объекты, классы и пакеты в Java
03 - Java. Объекты, классы и пакеты в Java03 - Java. Объекты, классы и пакеты в Java
03 - Java. Объекты, классы и пакеты в JavaRoman Brovko
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и GenericsRoman Brovko
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилейRoman Brovko
 
Apache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistenceApache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistenceIlya Lapitan
 
03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTMLRoman Brovko
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка формRoman Brovko
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данныхRoman Brovko
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизацияRoman Brovko
 
03-Hibernate. Документация
03-Hibernate. Документация03-Hibernate. Документация
03-Hibernate. ДокументацияRoman Brovko
 
04-Hibernate. Создание проекта
04-Hibernate. Создание проекта04-Hibernate. Создание проекта
04-Hibernate. Создание проектаRoman Brovko
 
01-Hibernate. Понятие ORM-JPA
01-Hibernate. Понятие ORM-JPA01-Hibernate. Понятие ORM-JPA
01-Hibernate. Понятие ORM-JPARoman Brovko
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTPRoman Brovko
 
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложенийRoman Brovko
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиентыRoman Brovko
 
03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты03 - Практика UML. Прецеденты
03 - Практика UML. ПрецедентыRoman Brovko
 

Viewers also liked (20)

08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри08 - Java. Java-классы: взгляд изнутри
08 - Java. Java-классы: взгляд изнутри
 
09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ09 - Java. Тестирование Java-программ
09 - Java. Тестирование Java-программ
 
04 - Java. Обработка ошибок, исключения, отладка
04 - Java. Обработка ошибок, исключения, отладка04 - Java. Обработка ошибок, исключения, отладка
04 - Java. Обработка ошибок, исключения, отладка
 
02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java02 - Java. Базовый синтаксис Java
02 - Java. Базовый синтаксис Java
 
03 - Java. Объекты, классы и пакеты в Java
03 - Java. Объекты, классы и пакеты в Java03 - Java. Объекты, классы и пакеты в Java
03 - Java. Объекты, классы и пакеты в Java
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics
 
04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей04 - Web-технологии. CSS - язык описания стилей
04 - Web-технологии. CSS - язык описания стилей
 
Apache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistenceApache Camel + Apache ActiveMQ persistence
Apache Camel + Apache ActiveMQ persistence
 
03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML03 - Web-технологии. Язык разметки HTML
03 - Web-технологии. Язык разметки HTML
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
 
03-Hibernate. Документация
03-Hibernate. Документация03-Hibernate. Документация
03-Hibernate. Документация
 
04-Hibernate. Создание проекта
04-Hibernate. Создание проекта04-Hibernate. Создание проекта
04-Hibernate. Создание проекта
 
01-Hibernate. Понятие ORM-JPA
01-Hibernate. Понятие ORM-JPA01-Hibernate. Понятие ORM-JPA
01-Hibernate. Понятие ORM-JPA
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP06 - Web-технологии. Протокол HTTP
06 - Web-технологии. Протокол HTTP
 
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
 
03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты03 - Практика UML. Прецеденты
03 - Практика UML. Прецеденты
 

More from Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

10 - Java. Многопоточность в Java: основы

  • 1. Многопоточность в Java: основы Алексей Владыкин 17 ноября 2014 Алексей Владыкин Многопоточность (1) 17 ноября 2014 1 / 24
  • 2. 1 Общие сведения о параллелизме 2 Управление потоками 3 Синхронизация потоков 4 Модель памяти Алексей Владыкин Многопоточность (1) 17 ноября 2014 2 / 24
  • 3. Общие сведения о параллелизме Алексей Владыкин Многопоточность (1) 17 ноября 2014 3 / 24
  • 4. Общие сведения о параллелизме Мотивация Одновременное выполнение нескольких действий (например, отрисовка пользовательского интерфейса и передача файлов по сети) Ускорение вычислений (при наличии нескольких вычислительных ядер) Алексей Владыкин Многопоточность (1) 17 ноября 2014 4 / 24
  • 5. Общие сведения о параллелизме Закон Амдала S(N) = 1 (1 − P) + P N S — ускорение (speedup) P — доля вычислений, которые возможно распараллелить N — количество вычислительных ядер Алексей Владыкин Многопоточность (1) 17 ноября 2014 5 / 24
  • 6. Общие сведения о параллелизме Параллелизм в Java Запуск нескольких JVM на одном или на разных компьютерах Нет общей памяти Взаимодействие через файловую систему или сетевое соединение Алексей Владыкин Многопоточность (1) 17 ноября 2014 6 / 24
  • 7. Общие сведения о параллелизме Параллелизм в Java Запуск нескольких JVM на одном или на разных компьютерах Нет общей памяти Взаимодействие через файловую систему или сетевое соединение Запуск нескольких потоков внутри JVM Есть общая память Обширная поддержка в языке и стандартной библиотеке Алексей Владыкин Многопоточность (1) 17 ноября 2014 6 / 24
  • 8. Общие сведения о параллелизме Проблемы параллельных программ Гонка (race condition) Взаимная блокировка (deadlock) Алексей Владыкин Многопоточность (1) 17 ноября 2014 7 / 24
  • 9. Управление потоками Алексей Владыкин Многопоточность (1) 17 ноября 2014 8 / 24
  • 10. Управление потоками java.lang.Thread Потоки представлены экземплярами класса java.lang.Thread String getName() long getId() boolean isDaemon() StackTraceElement[] getStackTrace() ThreadGroup getThreadGroup() Алексей Владыкин Многопоточность (1) 17 ноября 2014 9 / 24
  • 11. Управление потоками Thread dump Список всех потоков с их состояниями и stack trace’ами Ctrl+Break или Ctrl+ jps -l, затем jstack PID Кнопка в IDE Алексей Владыкин Многопоточность (1) 17 ноября 2014 10 / 24
  • 12. Управление потоками Создание потока: подкласс Thread Thread thread = new Thread () { @Override public void run() { // do some work } } Алексей Владыкин Многопоточность (1) 17 ноября 2014 11 / 24
  • 13. Управление потоками Создание потока: Runnable Runnable runnable = new Runnable () { @Override public void run() { // do some work } }; Thread thread = new Thread(runnable ); Алексей Владыкин Многопоточность (1) 17 ноября 2014 12 / 24
  • 14. Управление потоками Жизненный цикл потока Создание объекта Thread Запуск thread.start() Работа выполняется метод run(), thread.isAlive() == true Завершение метод run() закончился или бросил исключение Завершенный поток нельзя перезапустить Алексей Владыкин Многопоточность (1) 17 ноября 2014 13 / 24
  • 15. Управление потоками Прерывание потока thread.interrupt() Если поток находится в ожидании (sleep, join, wait), то ожидание прерывается исключением InterruptedException Иначе у потока просто устанавливается флаг interrupted флаг проверяется методами interrupted() и isInterrupted() проверять флаг и завершать поток надо самостоятельно thread.join() Алексей Владыкин Многопоточность (1) 17 ноября 2014 14 / 24
  • 16. Синхронизация потоков Алексей Владыкин Многопоточность (1) 17 ноября 2014 15 / 24
  • 17. Синхронизация потоков Возможности встроенной синхронизации Взаимное исключение (пока один поток что-то делает, другие не могут ему помешать) Ожидание и уведомление (поток ожидает уведомлений от других потоков) Алексей Владыкин Многопоточность (1) 17 ноября 2014 16 / 24
  • 18. Синхронизация потоков Ключевое слово synchronized Синхронизованный метод public synchronized void doSomething () { // ... } Синхронизованный блок внутри метода public void doSomething () { synchronized (obj) { // ... } } Алексей Владыкин Многопоточность (1) 17 ноября 2014 17 / 24
  • 19. Синхронизация потоков Ключевое слово synchronized Синхронизация блоков — по монитору указанного объекта Синхронизация методов — по монитору текущего объекта (this) Синхронизация статических методов — по монитору класса Алексей Владыкин Многопоточность (1) 17 ноября 2014 18 / 24
  • 20. Синхронизация потоков Ожидание и уведомления Допустимо только внутри synchronized void wait() void wait(long millis) void wait(long millis, int nanos) void notify() void notifyAll() Алексей Владыкин Многопоточность (1) 17 ноября 2014 19 / 24
  • 21. Модель памяти Алексей Владыкин Многопоточность (1) 17 ноября 2014 20 / 24
  • 22. Модель памяти Атомарность Чтение и запись полей всех типов, кроме long и double, происходит атомарно Если поле объявлено с модификатором volatile, то атомарно читаются и пишутся даже long и double Алексей Владыкин Многопоточность (1) 17 ноября 2014 21 / 24
  • 23. Модель памяти Видимость Изменения значений полей, сделанные одним потоком, могут быть не видны в другом потоке Изменения, сделанные одним потоком, могут быть видны в другом потоке в ином порядке Правила формализованы при помощи отношения happens-before Семантика final Алексей Владыкин Многопоточность (1) 17 ноября 2014 22 / 24
  • 24. Модель памяти happens-before Запись volatile-поля happens-before чтения этого поля Освобождение монитора happens-before захват того же монитора thread.start() happens-before thread.run() Завершение thread.run() happens-before выход из thread.join() . . . Алексей Владыкин Многопоточность (1) 17 ноября 2014 23 / 24
  • 25. Что сегодня узнали Какие бывают виды параллелизма и как они поддерживаются в Java Как в Java запускать и останавливать потоки Какие в Java есть встроенные в язык средства синхронизации потоков Что такое Java Memory Model Алексей Владыкин Многопоточность (1) 17 ноября 2014 24 / 24