Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
Java Concurrency
Определение
Многозадачность — свойство исполнять несколько задач одновременно
РеализацияКак реализуется многозадачность в ОС?
РеализацияКак реализуется многозадачность в ОС?
Процессорное время квантуется и распределяется между сущностями, которые эти задачи выполняют
Процессы и потокиВ современных ОС сущностями, выполняющими задачи, являются процессы и потоки
Процессы и потокиПроцессы — определяют не только последовательность действий, необходимых для решения задачи, но и инфраструктуру: адресное пространство, регистры, дескрипторы файлов
Потоки — определяют последовательность действий в рамках инфраструктуры процесса
Процессы и потоки● Потоки более «легковесные»
сущности чем процессы● Потоки «живут» в процессах ● Реализация процессов/потоков
зависит от ОС● Детали: Э. Таненбаум
«Современные операционные системы»
Многозадачность в JVM
● Реализуется через потоки, которые выполняются в процессе JVM
● Java скрывает реализацию потоков в ОС предоставляя нам API
● В Java есть низко- и высокоуровневый API для работы с потоками
Терминология● Stream и Thread переводятся как
потоки● Stream означает поток байт● Thread означает поток
выполнения. Так же переводят как «легковесные процессы», «нити»
Создание потоковclass ThreadAncestor extends Thread {
@Override
public void run() {
// ...
}
}
new ThreadAncestor().start();
Создание потоковnew Thread(new Runnable() {
@Override
public void run() {
// ...
}}).start();
Основные методы Thread
● sleep(long interval) // static● join()● stop() // Deprecated ● interrupt()
sleeptry {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
joinThread t = new Thread().start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
interruptThread t = new Thread();
t.interrupt();
СинхронизацияСинхронизация — организация взаимодействия нескольких потоков с общими данными
СинхронизацияСемафор — объект, позволяющий войти в него не более чем n потокам
Мьютекс — одноместный семафор
Монитор — механизм синхронизации, основанный на мьютексе
Синхронизацияsynchronized void foo(){...}
Object synchObj = new Object();
synchronized (synchObj) {
ballance -= value;
}
Deadlock● Как избежать?● Можно избежать только на этапе
проектирования● «Не бери ложку пока не оставил
вилку»● «Бери вилку и ложку сразу» ● В ходе выполнения программы
дедлок нельзя разрешить
Методы Object● wait ● notify● notifyAll
Пакет java.concurrency
● Появился в Java 5 ● Не использует блокирующие
конструкции (synchronized) ● Очень сильное колдунство● Читать «Java concurrency in
practice»
Пакет java.concurrency
● Lock vs synchronized● Executor vs new Thread().start()● Futures● Потокобезопасные коллекции ● Fork/join
Q&A