Курс профессиональной переподготовки
Курс повышения квалификации
Курс профессиональной переподготовки
Видеолекция
1 слайд
Параллелизм и потоки в Java
For students of university
Author: Oxana Dudnik
2 слайд
3 слайд
4 слайд
5 слайд
Создание потока
Существует два способа:
реализацией интерфейса Runnable;
class MyClass implements Runnable {
public void run() {
// тело метода run
}
}
наследованием класса Thread.
class MyClass extends Thread {
public void run() {
// тело метода run()
}
}
6 слайд
Запуск потока
Пришло время запустить поток. Это настолько просто, что врядли заслуживает отдельного раздела:
t.start();
Что происходит после старта потока? А происходит следующее:
Стартует новый поток выполнения (с новым стэком вызовов).
Поток переходит из состояния new (новый) в состояние работоспособный (runnable).
Когда поток получает шанс выполниться, он вызывает метод run().
7 слайд
Планировщик потоков
Планировщик потоков является частью JVM (хотя некоторые JVM мапят Java-потоки на нативные потоки ОС) и решает какой поток будет работать в определенный момент.
Любой поток, имеющий состояние runnable (работоспособный), может быть выбран планировщиком для выполнения.
8 слайд
Состояния потоков
9 слайд
Управление выполнением потоков
sleep(long millis); - задает задержку в миллисекундах;
sleep(long millis, int nanos) – задает задержку в миллисекундах и наносекундах.
Приостановка потока, с передачей управления другому потоку производится статическим методом yield().
Прервать работу выполняемого потока можно с помощью метода interrupt().
Чтобы определить состояние потока используется метод isAlive().
Иногда, для выполнения потока необходимо дождаться завершения другого потока. В этих случаях вам поможет метод join().
10 слайд
start(). Запускает поток на выполнение.
stop(). Заканчивает выполнение потока.
sleep(long msec). Останавливает выполнение потока на указанное количество миллисекунд.
yield(). Передает ресурсов процессора другому потоку.
suspend(). Приостанавливает выполнение потока.
resume(). Возобновляет выполнение потока.
11 слайд
Synchronized
12 слайд
Synchronized object
Object sync = new Object(); ... synchronized(sync){ }
13 слайд
Synchronized method
public synchronized void someMethod(){ // code }
... полностью эквивалентно следующей конструкции:
public void someMethod(){ synchronized(this){ // code } }
14 слайд
Synchronized class
public class SomeClass{ public static synchronized void someMethod(){ //code }
}
. эквивалентно:
public class SomeClass{ public static void someMethod(){ synchronized(SomeClass.class){ //code } }
}
15 слайд
Взаимные блокировки, deadlocks
Что такое взаимная блокировка по своей сути? Все достаточно просто. Предположим, что один поток уже захватил монитор на некотором объекте x и для продолжения работы ему нужно захватить монитор на объекте y.
В другом же потоке ситуация ровно обратная – он уже захватил монитор на объекте y и ему нужен монитор объекта x.
В результате оба потока будут ждать, пока нужный монитор освободится. Как вы сами прекрасно понимаете, ждать они будут до бесконечности.
Эта ситуация и называется взаимной блокировкой – deadlock.
16 слайд
17 слайд
18 слайд
Starvation
Название starvation полностью соответствует проблеме. Когда множество потоков постоянно находятся в борьбе за один критический ресурс, то все ждут, пока кто-то один освободит этот ресурс. Потом из ждущих по какому-либо алгоритму выбирается только кто-то один, кто следующим захватит ресурс. Таким образом, может найтись один такой поток, который никогда не получит доступ к ресурсу, потому что другие потоки постоянно захватывают ресурс раньше него.
19 слайд
livelock
livelock частая проблема в асинхронных системах. Там потоки почти не блокируются на критических ресурсах. Вместо этого они выполняют свою небольшую неблокируемую задачу и отправляют её в очередь на обработку другими потоками. Может возникнуть ситуация, когда потоки друг другу начинают перекидывать какое-то событие и его обработка зацикливается. Явного бесконечного цикла, как бы, не происходит, но нагрузка на асинхронную систему резко возрастает. В результате чего эти потоки больше ничем не успевают занимаются.
20 слайд
21 слайд
22 слайд
Modificator volatile
определение переменной с ключевым словом volatile(«изменчивый») означает, что значение переменной будет изменяться разными потоками.
чтение volatile переменных синхронизировано и запись в volatile переменные синхронизирована, а неатомарные операции – нет.
Что означает, что следующий код не безопасен для потоков:
myVolatileVar++;
23 слайд
Non-volitile variable
24 слайд
Volitile variable
25 слайд
В чем разница между volatile и synchronized?
synchronized имеет два важных момента: это гарантия того, что только один поток выполняет секцию кода в один момент времени (взаимоисключение или mutex), и также гарантия того, что данные, изменённые одним потоком, будут видны всем другим потокам (видимость изменений).
volatile проще, нежели синхронизация и подходит только для контроля доступа к одиночному экземпляру или переменной примитивного типа: int, boolean... Когда переменная объявлена как volatile, любая запись её будет осуществляться прямо в память, минуя кеш. Также как и считываться будет прямо из памяти, а не из всевозможного кеша. Это значит, что все потоки будут "видеть" одно и то же значение переменной одновременно.
26 слайд
Literature
https://www.youtube.com/watch?v=1WfbAs6ZJD0
https://www.youtube.com/watch?v=RrDaXkiXDfA
https://www.youtube.com/watch?v=J1IYHMPMfS4
http://echuprina.blogspot.com/2012/02/java-1.html
http://www.skipy.ru/technics/synchronization.html#management
Когда запускается любое приложение, то начинает выполняться поток, называемый главным потоком (main). От него порождаются дочерние потоки. Главный поток, как правило, является последним потоком, завершающим выполнение программы.
Потоки — средство, которое помогает организовать одновременное выполнение нескольких задач, каждой в независимом потоке. Потоки представляют собой экземпляры классов, каждый из которых запускается и функционирует самостоятельно, автономно (или относительно автономно) от главного поток. Хочу еще разграничить два понятия – поток и процесс. Процесс – это задача операционной системы. У него собственное адресное пространство. С ним может быть проассоциировано несколько потоков. Поток же – это гораздо более мелкая единица. Все потоки разделяют адресное пространство породившего их процесса и имеют доступ к одним данным.6 175 916 материалов в базе
Настоящий материал опубликован пользователем Dudnik Oxana Antonovna. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Игры на развитие межполушарного взаимодействия у детей с ТНР
Как преуспеть в роли репетитора: анализируем свой проект по бизнес-модели Canvas
Управление симптомами болезни в деятельности специалиста сестринского дела
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.