java concurrency - sprava.net · java.concurrency Появился в java 5 Не...

23
Java Concurrency

Upload: others

Post on 26-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Java Concurrency

Page 2: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Определение

Многозадачность — свойство исполнять несколько задач одновременно

Page 3: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

РеализацияКак реализуется многозадачность в ОС?

Page 4: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

РеализацияКак реализуется многозадачность в ОС?

Процессорное время квантуется и распределяется между сущностями, которые эти задачи выполняют

Page 5: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Процессы и потокиВ современных ОС сущностями, выполняющими задачи, являются процессы и потоки

Page 6: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Процессы и потокиПроцессы — определяют не только последовательность действий, необходимых для решения задачи, но и инфраструктуру: адресное пространство, регистры, дескрипторы файлов

Потоки — определяют последовательность действий в рамках инфраструктуры процесса

Page 7: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Процессы и потоки● Потоки более «легковесные»

сущности чем процессы● Потоки «живут» в процессах ● Реализация процессов/потоков

зависит от ОС● Детали: Э. Таненбаум

«Современные операционные системы»

Page 8: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Многозадачность в JVM

● Реализуется через потоки, которые выполняются в процессе JVM

● Java скрывает реализацию потоков в ОС предоставляя нам API

● В Java есть низко- и высокоуровневый API для работы с потоками

Page 9: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Терминология● Stream и Thread переводятся как

потоки● Stream означает поток байт● Thread означает поток

выполнения. Так же переводят как «легковесные процессы», «нити»

Page 10: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Создание потоковclass ThreadAncestor extends Thread {

@Override

public void run() {

// ...

}

}

new ThreadAncestor().start();

Page 11: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Создание потоковnew Thread(new Runnable() {

@Override

public void run() {

// ...

}}).start();

Page 12: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Основные методы Thread

● sleep(long interval) // static● join()● stop() // Deprecated ● interrupt()

Page 13: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

sleeptry {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

Page 14: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

joinThread t = new Thread().start();

try {

t.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

Page 15: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

interruptThread t = new Thread();

t.interrupt();

Page 16: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

СинхронизацияСинхронизация — организация взаимодействия нескольких потоков с общими данными

Page 17: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

СинхронизацияСемафор — объект, позволяющий войти в него не более чем n потокам

Мьютекс — одноместный семафор

Монитор — механизм синхронизации, основанный на мьютексе

Page 18: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Синхронизацияsynchronized void foo(){...}

Object synchObj = new Object();

synchronized (synchObj) {

ballance -= value;

}

Page 19: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Deadlock● Как избежать?● Можно избежать только на этапе

проектирования● «Не бери ложку пока не оставил

вилку»● «Бери вилку и ложку сразу» ● В ходе выполнения программы

дедлок нельзя разрешить

Page 20: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Методы Object● wait ● notify● notifyAll

Page 21: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Пакет java.concurrency

● Появился в Java 5 ● Не использует блокирующие

конструкции (synchronized) ● Очень сильное колдунство● Читать «Java concurrency in

practice»

Page 22: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Пакет java.concurrency

● Lock vs synchronized● Executor vs new Thread().start()● Futures● Потокобезопасные коллекции ● Fork/join

Page 23: Java Concurrency - sprava.net · java.concurrency Появился в Java 5 Не использует блокирующие конструкции (synchronized) Очень сильное

Q&A