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

Post on 26-Aug-2020

12 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related