Модель потоков в Java. Многопоточное программирование. (Лекция 4)

Содержание

Слайд 2

Модель потоков в Java

Java использует потоки (threads), чтобы была возможность написания асинхронных

Модель потоков в Java Java использует потоки (threads), чтобы была возможность написания
программ.
Однопоточные системы используют подход, называемый цикл событий (event loop) с голосованием (polling).

РГРТУ, 2020

Слайд 3

Приоритеты в потоках

Приоритеты потоков представляют собой целые числа, которые определяют относительный приоритет

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

РГРТУ, 2020

Слайд 4

Синхронизация

Для обеспечения синхронизации потоков в Java есть средство, которое называется монитор.
Когда поток

Синхронизация Для обеспечения синхронизации потоков в Java есть средство, которое называется монитор.
находится внутри синхронизирующего метода ни один другой поток не может вызвать какой-либо другой синхронизирующий метод на том же самом объекте.

РГРТУ, 2020

Слайд 5

Сообщения

РГРТУ, 2020

Когда в разрабатываемом многопоточном ПО потоки пишутся на разных языках программирования,

Сообщения РГРТУ, 2020 Когда в разрабатываемом многопоточном ПО потоки пишутся на разных
то необходимо обеспечить между ними коммуникацию.
В Java существует способ для общения между собой двух и более потоков через вызовы предопределённых методов, которые имеются у всех объектов.

Слайд 6

Класс Thread и интерфейс Runnable

РГРТУ, 2020

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

Класс Thread и интерфейс Runnable РГРТУ, 2020 Для создания нового потока, в
либо создать класс-наследник Thread, либо реализовать интерфейс Runnable.
Наиболее часто используемые методы класса Thread: getName(), getPriority(), isAlive(), join(), run(), sleep(), start().

Слайд 7

Главный поток

РГРТУ, 2020

От главного потока порождаются все “дочерние”.
Часто главный поток бывает последним

Главный поток РГРТУ, 2020 От главного потока порождаются все “дочерние”. Часто главный
потоком завершающим выполнение, т.к. он выполняет различные завершающие действия.

Слайд 8

Реализация интерфейса Runnable

РГРТУ, 2020

Для реализации интерфейса Runnable, необходимо написать реализацию единственного метода

Реализация интерфейса Runnable РГРТУ, 2020 Для реализации интерфейса Runnable, необходимо написать реализацию
run().
public void run()

Слайд 9

Создание экземпляра Thread

Класс-наследник должен переопределять метод run(), который является точкой входа для

Создание экземпляра Thread Класс-наследник должен переопределять метод run(), который является точкой входа
нового потока.
Необходимо использовать следующую форму конструктора Thread:
public Thread(String threadName)

РГРТУ, 2020

Слайд 10

Какой выбрать способ?

Класс Thread содержит несколько методов, которые могут быть переопределены в

Какой выбрать способ? Класс Thread содержит несколько методов, которые могут быть переопределены
наследуемом классе.
Многие программисты говорят, что классы необходимо наследовать только тогда, когда они расширяют или переопределяют существующий класс.

РГРТУ, 2020

Слайд 11

Создание нескольких потоков

Как правило, в промышленном ПО используются не 2 потока, а

Создание нескольких потоков Как правило, в промышленном ПО используются не 2 потока,
гораздо больше.

РГРТУ, 2020

Слайд 12

Использование isAlive() и join()

Как один поток может узнать, когда завершится другой?
Во-первых, через

Использование isAlive() и join() Как один поток может узнать, когда завершится другой?
вызов метода isAlive() в потоке.
final boolean isAlive()

РГРТУ, 2020

Слайд 13

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

В теории через определённый период времени потоки с высоким приоритетом получают

Приоритеты потоков В теории через определённый период времени потоки с высоким приоритетом
больше времени CPU, чем потоки с низким приоритетом.
В целях безопасности потоки с одинаковым приоритетами должны иногда уступать управление.

РГРТУ, 2020

Слайд 14

Синхронизация

Когда 2 или более потокам необходим доступ к общему ресурсу, то им

Синхронизация Когда 2 или более потокам необходим доступ к общему ресурсу, то
нужен способ, чтобы узнать, когда ресурс будет использоваться только одним потоком.
Монитор - это объект, который используется как взаимоисключающая блокировка.

РГРТУ, 2020

Слайд 15

Использование синхронизирующих методов

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

Использование синхронизирующих методов Для включения монитора объекта необходимо вызвать метод, который будет
ключевым словом synchronized.
До тех пор, пока поток находится внутри синхронизирующего метода все другие потоки, пытающиеся вызвать его (или любой другой синхронизирующий метод) переводятся в состояние ожидания.

РГРТУ, 2020

Слайд 16

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

Для использования синхронизации в классах, не использующих её, необходимо вызывать методы

Блоки синхронизации Для использования синхронизации в классах, не использующих её, необходимо вызывать
класса внутри блока синхронизации.
synchronized(objRef) {
// выражения, которые необходимо синхронизировать
}

РГРТУ, 2020

Слайд 17

Межпотоковое взаимодействие

Использование неявных мониторов в объектах Java эффективно, но можно достичь более

Межпотоковое взаимодействие Использование неявных мониторов в объектах Java эффективно, но можно достичь
высокого уровня управления через межпроцессное взаимодействие.
У потоков есть интересная особенность: они начинаются после «голосования».

РГРТУ, 2020

Слайд 18

Взаимоблокировка

В основном, взаимоблокировка происходит редко, например, когда два потока выполняются одновременно.
Взаимоблокировка может

Взаимоблокировка В основном, взаимоблокировка происходит редко, например, когда два потока выполняются одновременно.
включать более, чем два потока и два синхронизируемых объекта.

РГРТУ, 2019

Слайд 19

Приостановка, возобновление и остановка потоков

Для показа текущего времени в операционной системе используется

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

РГРТУ, 2020

Слайд 20

Получение состояния потока

Для получения текущего состояния потока используется метод getState(), определённый в

Получение состояния потока Для получения текущего состояния потока используется метод getState(), определённый
классе Thread:
Thread.State getState()

РГРТУ, 2020

Слайд 21

Использование фабричного метода для создания и запуска потока

В некоторых случаях бывает удобно

Использование фабричного метода для создания и запуска потока В некоторых случаях бывает
одновременно создавать и запускать поток.

РГРТУ, 2020

Имя файла: Модель-потоков-в-Java.-Многопоточное-программирование.-(Лекция-4).pptx
Количество просмотров: 140
Количество скачиваний: 0