Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Потоки выполнения. Java

Содержание

ВведениеПроблемы однопоточного подхода:•••Монопольный захват задачей процессорного времени.Простой во время ожидания освобождения внешних ресурсов. Смешение логически несвязанных фрагментов, которые должны выполнятся параллельно.Многопоточное программирование:•••Последовательно выполняющиеся инструкции составляют поток.Потоки выполняются условно независимо. Взаимодействие потоков друг с другом.© 2013 NetCracker
Лекция 8. Потоки выполнения© 2013 NetCracker Technology Corp. Confidential. ВведениеПроблемы однопоточного подхода:•••Монопольный захват задачей процессорного времени.Простой во время ожидания освобождения внешних Квантование времениОсобенности процедуры квантования времени:••••••Время делиться на интервалы (кванты времени)Во время одного Особенности многопоточностиОсобенности многопоточной архитектуры:••••Простота выделения подзадачБолее гибкое управление выполнением задачБолее медленное выполнение Создание потоков. Класс ThreadПоток – экземпляр класса Thread. Для создания своего потока Интерфейс Runnable•••Множественное наследование от класса Thread – может привести к конфликту!Класс Thread Работа с потокамиДля работы с потоками и для управления ими существуют следующие Группы потоков••Каждый поток принадлежит к некоторой группеПотоки делятся на группы потоков в Группы потоковКонструкторы и методы объекта ThreadGroup:•public Thread (ThreadGroup group, String name) – Приоритеты потоков••••Процедура квантования времени поддерживает приоритеты (priority) задачПриоритет для задачи представляется целым Демон-потоки. Демон-группыclass DaemonDemo extends Thread {public DaemonDemo() { super( Демон-потоки. Демон-группыРезультатом программы будет:© 2010 NetCracker Technology Corp. Confidential.10/29/201012Thread 16, Thread 16, Разделяемые ресурсы•Виртуальнаямашинаподдерживаетосновное  хранилищеданных(main storage), в котором сохраняютсякоторое используется всеми потокамизначения всех Синхронизация•Синхронизированный блок//Блокируется указанный объектsynchronized (){{•Синхронизированный метод//Блокируется объект-владелец методаpublic synchronized void (){}© 2010 NetCracker Technology Corp. Confidential.10/29/201014 Блокировки•Только один поток в один момент времени может вызвать синхронизированный метод иустановить Взаимные блокировкиВзаимная блокировка (англ. deadlock) —при которой несколько потоков находятсязахваченных самими этими Методы класса Object (notify, wait, notifyAll)••Каждый объект в Java имеет набор потоков Запрещенные действия над потоками. Прерывание потока•Thread.suspend(), Thread.resume() – использование данных методов приводит Литература•••Курс лекций МФТИ «Программирование на Java»Дж. Гослинг – Язык программирования Java. 3-e Thank you!© 2010 NetCracker Technology Corp. Confidential.10/29/201020
Слайды презентации

Слайд 2 Введение
Проблемы однопоточного подхода:



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

ВведениеПроблемы однопоточного подхода:•••Монопольный захват задачей процессорного времени.Простой во время ожидания освобождения

время ожидания освобождения внешних ресурсов.
Смешение логически несвязанных фрагментов,

которые должны
выполнятся параллельно.

Многопоточное программирование:




Последовательно выполняющиеся инструкции составляют поток.
Потоки выполняются условно независимо. Взаимодействие потоков друг с другом.

© 2013 NetCracker Technology Corp. Confidential.

2


Слайд 3 Квантование времени
Особенности процедуры квантования времени:






Время делиться на интервалы

Квантование времениОсобенности процедуры квантования времени:••••••Время делиться на интервалы (кванты времени)Во время

(кванты времени)
Во время одного кванта обрабатывается один поток данных
Решение

о выборе потока принимается до начала интервала
Переключение между потоками с высокой частотой эмулирует многопоточность
Поддержка приоритетов для выполняемых потоков
Иллюзия одновременности!

© 2013 NetCracker Technology Corp. Confidential.

3


Слайд 4 Особенности многопоточности
Особенности многопоточной архитектуры:




Простота выделения подзадач
Более гибкое управление

Особенности многопоточностиОсобенности многопоточной архитектуры:••••Простота выделения подзадачБолее гибкое управление выполнением задачБолее медленное

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

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

2013 NetCracker Technology Corp. Confidential.

4


Слайд 5 Создание потоков. Класс Thread
Поток – экземпляр класса Thread.

Создание потоков. Класс ThreadПоток – экземпляр класса Thread. Для создания своего

Для создания своего потока исполнения необходимо
наследоваться от данного класса

и переопределить метод run().


run() – метод, который содержит
действия, которые должны выполнятся в
потоке.
start() – унаследованный метод,
который сообщает виртуальной машине,
что необходимо запустить новый поток
исполнения и начать в нём выполнение
метода run().


© 2013 NetCracker Technology Corp. Confidential.

10/29/2010

5


Способ запуска:
MyThread t = new MyThread();
t.start();


Пример класса:
public class MyThread extends Thread {
public void run() {
// некоторое долгое вычисление
long sum = 0;
for (int i=0; i < 1000; i++) {
sum+=i;
}
System.out.println(sum);
}
}


Слайд 6 Интерфейс Runnable



Множественное наследование от класса Thread – может

Интерфейс Runnable•••Множественное наследование от класса Thread – может привести к конфликту!Класс

привести к конфликту!
Класс Thread реализует интерфейс Runnable.
Runnable – интерфейс,

в котором абстрагируется концепция некой
программу во время своей активности.

сущности,

выполняющей


Интерфейс Runnable

объявляет всего один метод – public void run();

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

6


Runnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();


public class MyRunnable implements Runnable {
public void run() {
// некоторое долгое вычисление
long sum=0;
for (int i=0; i<1000; i++) {
sum+=i;
}
System.out.println(sum);
}
}


Слайд 7 Работа с потоками
Для работы с потоками и для

Работа с потокамиДля работы с потоками и для управления ими существуют

управления ими существуют следующие стандартные функции:





start() – запуск выполнения

потока;
stop() – прекращение выполнения потока; suspend() – приостанавливает выполнение потока; resume() – возобновляет выполнение потока;

void
void void void

static void sleep (long millis) – приостанавливает выполнение потока как минимум на
millis миллисекунд;
static void yield() – приостанавливает выполнение потока, предоставляя возможность
выполнять другие потоки;
public final void join() – ожидание безусловного завершения потока, для которого
вызывается метод
public final synchronized void join(long millis) – ожидание завершения потока или
истечения заданного числа миллисекунд (в зависимости то того, что произойдёт раньше)
public final synchronized void join(long millis, int nanos) – ожидание





завершения

потока или тайм-аута с более точным контролем времени

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

7


Слайд 8 Группы потоков


Каждый поток принадлежит к некоторой группе
Потоки делятся

Группы потоков••Каждый поток принадлежит к некоторой группеПотоки делятся на группы потоков

на группы потоков в целях безопасности (ограничение возможностей, чтобы

потоки не мешали друг другу)
Группа потоков может входить в состав другой группы (иерархия)
Потоки внутри группы могут изменять другие потоки, входящие в ту же
группу
Поток не может модифицировать потоки за пределами своей собственной и всех подчинённых групп
Ограничения, накладываемые на потоки, входящие в группу, описываются объектом ThreadGroup
Группа может задаваться в конструкторе потока
По умолчанию, каждый новый поток помещается в ту же группу, в которую входит его поток-создатель.
После завершения потока, соответствующий объект удаляется из группы








© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

8


Слайд 9 Группы потоков
Конструкторы и методы объекта ThreadGroup:

public Thread (ThreadGroup

Группы потоковКонструкторы и методы объекта ThreadGroup:•public Thread (ThreadGroup group, String name)

group, String name) – новый поток с заданным именем

name (может быть
равно null), принадлежащий конкретной группе
public ThreadGroup (String name) – создаёт новую группу ThreadGroup
public ThreadGroup (ThreadGroup parent, String name) – создаёт новую группу ThreadGroup с заданным именем, принадлежающую указанной parent группе
public final String ThreadGroup.getName() – возвращает имя группы ThreadGroup
public final ThreadGroup ThreadGroup.getParent() – возвращает родительскую группу ThreadGroup или
null, если её не существует.
public final void setDaemon (boolean daemon) – устанавливает «демонический» статус группы/потока
public Thread.getThreadGroup – метод, позволяющий узнать, к какой группе принадлежит некоторый поток.
public final void Thread.checkAccess() – метод, позволяющий проверить допустима ли модификация потока
public final synchronized void setMaxPriority(int maxPri) – метод, задающий максимальный
приоритет группы
public final synchronized void destroy() – уничтожает текущую группу типа ThreadGroup (группа, в которой содержаться потоки, не может быть уничтожена)










© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

9


Слайд 10 Приоритеты потоков




Процедура квантования времени поддерживает приоритеты (priority) задач
Приоритет

Приоритеты потоков••••Процедура квантования времени поддерживает приоритеты (priority) задачПриоритет для задачи представляется

для задачи представляется целым числом
Чем больше число – тем

выше приоритет
Поток с более высоким приоритетом получает большее количество квантов времени на исполнение

Для работы с приоритетами существуют такие основные методы класса Thread:
getPriority(), setPriority()
а так же объявлены три константы:
MIN_PRIORITY, MAX_PRIORITY, NORM_PRIORITY

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

10


Слайд 11 Демон-потоки. Демон-группы
class DaemonDemo extends Thread {
public DaemonDemo() {

Демон-потоки. Демон-группыclass DaemonDemo extends Thread {public DaemonDemo() { super(


super("Daemon demo thread");
setDaemon(true);
start();
}
public void run() {
Thread threads[] =

new Thread[10];

public class ThreadTest implements Runnable {

// Отдельная
// находится
public final

группа, в которой будут
все потоки ThreadTest
static ThreadGroup GROUP =

new ThreadGroup("Daemon demo");
// Стартовое значение
private int start;

public ThreadTest(int
start = (s % 2 ==
new Thread(GROUP,
}
public void run() {
try {

s) {
0) ? s : s+1;
this, "Thread

try

{
while (true) {
// Получаем
// тестовой
int count =

"+start).start();

набор всех потоков из
группы
ThreadTest.GROUP.activeCount();

if (threads.length < count)
threads = new Thread[count+10];

// Начинаем обратный отсчет
for (int i=start; i>0; i--) {
Thread.sleep(300);

count = ThreadTest.GROUP.enumerate(threads);

//
//
if

По достижению середины

порождаем новый

поток с половинным начальным
(start > 2 && i == start/2)
new ThreadTest(i);

значением

// Распечатываем имя каждого потока
for (int i=0; iSystem.out.print(threads[i].getName() + ",
System.out.println();

");

}

}
catch (InterruptedException e) {}

Thread.sleep(300);

}
public static void main(String s[]) {
new ThreadTest(16);
new DaemonDemo();
}

}

}
catch (InterruptedException e) {}

}

}

}

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

11


Слайд 12 Демон-потоки. Демон-группы
Результатом программы будет:
© 2010 NetCracker Technology Corp.

Демон-потоки. Демон-группыРезультатом программы будет:© 2010 NetCracker Technology Corp. Confidential.10/29/201012Thread 16, Thread

Confidential.
10/29/2010
12

Thread 16,
Thread 16,
Thread 16,
Thread 16,
Thread

16,
Thread 16,
Thread 16,
Thread 16,
Thread 16,
Thread 16, Thread 8,
Thread 16, Thread 8,
Thread 16, Thread 8,
Thread 16, Thread 8,
Thread 16, Thread 8,
Thread 16, Thread 8, Thread 4,
Thread 16, Thread 8, Thread 4,
Thread 8, Thread 4,
Thread 4, Thread 2,
Thread 2,

Слайд 13 Разделяемые ресурсы

Виртуальная
машина
поддерживает
основное хранилище
данных
(main storage), в котором сохраняются
которое

Разделяемые ресурсы•Виртуальнаямашинаподдерживаетосновное хранилищеданных(main storage), в котором сохраняютсякоторое используется всеми потокамизначения всех

используется всеми потоками
значения всех переменных и

Для
каждого
потока
создается его
собственная
рабочая
память
(working
memory),
в
которую
перед
использованием
копируются
значения всех

переменных.

volatile поля всегда читаются/записываются из/в основной памяти.

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

13


Слайд 14 Синхронизация

Синхронизированный блок
//Блокируется указанный объект
synchronized ()
{

Синхронизация•Синхронизированный блок//Блокируется указанный объектsynchronized (){{•Синхронизированный метод//Блокируется объект-владелец методаpublic synchronized void (){}© 2010 NetCracker Technology Corp. Confidential.10/29/201014

синхронизации>
{

Синхронизированный метод
//Блокируется объект-владелец метода
public synchronized void ()
{

}
©

2010 NetCracker Technology Corp. Confidential.

10/29/2010

14


Слайд 15 Блокировки

Только один поток в один момент времени может

Блокировки•Только один поток в один момент времени может вызвать синхронизированный метод

вызвать синхронизированный метод и
установить блокировку на некоторый объект
Попытка блокировки

уже заблокированного объекта приводит к останову потока до момента разблокирования данного объекта




Планировщик потоков периодически активизирует потоки, ожидающие снятия блокировки
Наличие блокировки не запрещает всех остальных действий с объектом


Блокировка

объекта

снимается

автоматически

при

прекращении

выполнения

синхронизированного метода (исключительная ситуация)
На объект возможно наложить блокировку и вызвать несколько синхронизированных
методов



Каждый объект имеет счётчик блокировок (lock count)
Поток может наложить блокировку на несколько объектов одновременно



Блокируется только объект, но не метод.

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

15


Слайд 16 Взаимные блокировки
Взаимная блокировка (англ. deadlock) —
при которой несколько

Взаимные блокировкиВзаимная блокировка (англ. deadlock) —при которой несколько потоков находятсязахваченных самими

потоков находятся
захваченных самими этими потоками.
ситуация в многопоточном программировании,
в
состоянии
бесконечного
ожидания
ресурсов,
Пример простой

взаимной блокировки

• В Java нет никаких средств распознавания или предотвращения ситуаций deadlock.
• Также нет способа перед вызовом синхронизированного метода узнать, заблокирован уже объект другим потоком.

ли

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

16


Слайд 17 Методы класса Object (notify, wait, notifyAll)


Каждый объект в

Методы класса Object (notify, wait, notifyAll)••Каждый объект в Java имеет набор

Java имеет набор потоков исполнения (wait-set)
Любой поток может вызвать

метод wait() любого объекта и попасть в его
wait-set, остановившись до пробуждения
Метод объекта notify() пробуждает один, случайно выбранный поток из
wait-set группы объекта



Метод объекта
объекта

notifyAll()

пробуждает

все

потоки из wait-set группы


Любой из этих методов может быть вызван потоком у объекта только
после установления блокировки на этот объект
Потоки, после вызова метода wait() снимают все блокировки.



После

вызова

метода notify()

или

notifyAll()

потоки

пытаются

восстановить ранее снятые блокировки

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

17


Слайд 18 Запрещенные действия над потоками. Прерывание потока

Thread.suspend(), Thread.resume() –

Запрещенные действия над потоками. Прерывание потока•Thread.suspend(), Thread.resume() – использование данных методов

использование данных методов приводит к
увеличению количества взаимных блокировок

Thread.stop()
объектов

использование
приводит
к
возникновению
повреждённых


public void

interrupt () – изменяет статус потока на прерванный
public static boolean interrupted () – возвращает и очищает статус потока (прерван или нет)
public boolean isInterrupted () – возвращает статус потока (прерван или нет)


Если поток выполняет методы wait(), sleep, join(), прерывание потока методом
interrupt () приводит:


Поток прерывает своё выполнение с выбросом исключения InterruptedException

© 2010 NetCracker Technology Corp. Confidential.

10/29/2010

18


Слайд 19 Литература



Курс лекций МФТИ «Программирование на Java»
Дж. Гослинг –

Литература•••Курс лекций МФТИ «Программирование на Java»Дж. Гослинг – Язык программирования Java.

Язык программирования Java. 3-e издание
http://www.intuit.ru/department/pl/javapl/12/1.html
© 2010 NetCracker Technology Corp.

Confidential.

10/29/2010

19


  • Имя файла: potoki-vypolneniya-java.pptx
  • Количество просмотров: 178
  • Количество скачиваний: 0
- Предыдущая JOYEUX ANNIVERSAIRE