Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 11. Многопоточное программирование. Общие принципы и реализация в Java.pptx

.pdf
Скачиваний:
152
Добавлен:
16.03.2015
Размер:
189.16 Кб
Скачать

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

Лекция 11

Многопоточное программирование: общие принципы

иреализация в Java

©Составление, Гаврилов А.В., 2013

Самара

2013

План лекции

nМногопоточное программирование и его особенности

nПотоки и работа с ними

nГруппы потоков

nПриоритеты потоков

nДемон-потоки

nБлокировки и синхронизация

nНовые виды ошибок

nСовместная работа с полями и переменными

nМетоды класса Object

nПрерывание потоков

nВысокоуровневые средства

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

2

Проблемы однопоточного подхода

nМонопольный захват задачей процессорного времени

nСмешение логически несвязанных фрагментов кода

nПопытка их разделения приводит к возникновению в программе новых систем и усложнению кода

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

3

Многопоточное

программирование

nПоследовательно выполняющиеся инструкции составляют поток

nПотоки выполняются условно независимо

nПотоки могут взаимодействовать друг с другом

Это не так

n В многоядерной

поток

монопольно

одно ядро

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

4

Квантование времени

(Time-Slicing)

nВремя разделяется на интервалы (кванты времени)

nВо время одного кванта обрабатывается один поток команд

nРешение о выборе потока принимается до начала интервала

nПереключения между потоками с высокой частотой

T1

T2

T3

T4

T3

T4

Время

n Иллюзия одновременности!

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

5

Особенности

многопоточности

nПростота выделения подзадач

nБолее гибкое управление выполнением задач

nБолее медленное выполнение ?

nВыигрыш в скорости выполнения при разделении задач по используемым ресурсам

nВыигрыш в скорости выполнения на многоядерных системах

nНедетерминизм при выполнении

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

6

Использование класса Thread

n Описание класса

public class ИмяКласса extends Thread { public void run() {

// Действия, выполняемые потоком

}

}

n Запуск потока

ИмяКласса t = new ИмяКласса();

t.start(); // именно start(), а не run() !!!

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

7

Использование интерфейса

Runnable

n Описание класса

public class ИмяКласса implements Runnable { public void run() {

// Действия, выполняемые потоком

}

}

n Запуск потока

Runnable r = new ИмяКласса(); // Это ещё не поток

Thread t = new Thread(r); // А вот это уже поток t.start();

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

8

Особенности использования интерфейса Runnable

nВозможность создать класс, описывающий тело потока и наследующий от класса, отличного от

Thread

nОбъект вашего класса не является объектом потока

nНевозможно использовать напрямую методы класса Thread

nМожно получить ссылку на объект текущего потока с помощью статического метода currentThread() класса Thread

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

9

Управление потоками

n n n n n

void start()

Запускает выполнение потока void stop()

Прекращает выполнение потока void suspend()

Приостанавливает выполнение потока void resume()

Возобновляет выполнение потока void join()

Останавливает выполнение текущего потока до завершения потока, у объекта которого был вызван метод

n static void sleep(long millis)

Останавливает выполнение текущего потока как минимум на millis миллисекунд

n static void yield()

Приостанавливает выполнение текущего потока, предоставляет возможность выполнять другие потоки

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

10