Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Лекция 7.ppt
Скачиваний:
92
Добавлен:
15.06.2021
Размер:
884.74 Кб
Скачать

GUI в Java. Пример «слушания» событий мыши и клавиатуры

Лекция 7

Основы Java

МИЭТ, 2016

Многопоточность в Java

Многопоточность. Понятия и определения

Лекция 7

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

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

Такие средства может предоставлять операционная система.

Многопоточность. Понятия и определения

Лекция 7

Поток — это единица исполнения кода внутри процесса. В одном процессе всегда выполняется как минимум один поток. Для однопоточной программы единица исполнения кода равна всему коду программы.

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

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

Многопоточность в Java.

Лекция 7

Способы создания потоков в Java

1.Создать объект класса, реализующего интерфес Runnable

2.Создать объект класса, расширяющего класс Thread

Независимо от способа 1 или 2 внутри класса должен быть определен метод run, который является аналогом метода main и с которого начинается выполнение программного кода класса данного потока.

Отличие способов «Runnable» от «Thread»

1.При имплементации Runnuble, необходимо иметь внутри переменную типа Thread для запуска потока.

2.При наследовании от Thread, для манипулирования потоком можно обращаться к this

3.При имплементации Runnuble больше возможностей манипуляции с потоком, но она более сложна

Многопоточность в Java. Отличие способов «Runnable» от «Thread» Лекция 7

Пример использования Runnable

class BallRunnable implements Runnable

{

Thread thrd; private Ball ball;

private Component component;

public BallRunnable(Ball aBall, Component aComponent)

{

ball = aBall; //работаем с конкретным мячиком component = aComponent;

thrd = new Thread(this, ball.getName()); thrd.start();

}

public void run() { try {

//Код, который будет вызываться при старте потока

}

catch (InterruptedException e) {

}

}

}

Многопоточность в Java. Отличие способов «Runnable» от «Thread» Лекция 7

Пример использования Thread

class BallRunnable extends Thread

{

private Ball ball;

private Component component;

public BallRunnable(Ball aBall, Component aComponent)

{

super(aBall.getName());

ball = aBall; //работаем с конкретным мячиком component = aComponent;

start();

}

public void run() { try {

//Код, который будет вызываться при старте потока

}

catch (InterruptedException e) {

}

}

}

Многопоточность в Java. Состояния потока

Лекция 7

1. Новый

Создан, но не запущен

2. Исполняемый

Запущен start-ом и работает

3. Блокированный

Ожидает события для продолжения работы («не по своей воле»)

4. Ожидающий

Ожидает события для продолжения работы («по своей воле»)

5. Временно ожидающий

Ожидает события или истечения заданного времени для продолжения работы

6. Завершенный

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

Многопоточность в Java. Состояния потока

Лекция 7

Контроль состояния потока

int getState() - получить код состояния boolean isAlive() - узнать жив ли поток

Thread currentThread() - получить текущий поток

getState()

isAlive()

 

 

 

 

NEW

false

Новый

 

 

 

RUNNABLE

true

Исполняемый

 

 

 

BLOCKED

true

Блокированный

 

 

 

WAITING

true

Ожидающий

 

 

 

TIMED_WAITING

true

Временно ожидающий

 

 

 

TERMINATED

false

Завершенный

 

 

 

Многопоточность в Java. Действия с потоками

Лекция 7

 

 

 

Метод

Описание

 

 

 

 

Синхронизация - необязательна

 

 

 

 

final String setName()

Присваивание имени потоку

 

 

 

 

final String getName()

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

 

 

 

 

final String getPriority()

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

 

 

 

 

final String setPriority()

Установка приоритета потока

 

 

 

 

final boolean isAlive()

Определяет, выполняется ли поток

 

 

 

 

final void join()

Ожидает завершения потока

 

 

 

 

void run()

Определяет точку входа в поток

 

 

 

 

void start()

Запускает поток, вызывая run()

 

 

 

static void sleep(long мс.)

Приостанавливает поток на число миллисекунд

 

 

 

final void yield()

Пропустить на выполнение другие потоки

 

 

 

 

Синхронизация - обязательна

 

 

 

 

 

final void wait()

Переводит поток в режим ожидания

 

 

 

final void notify()

Возобновляет выполнение одного ожидающего потока

 

 

final void notifyAll()

Уведомляет все ожидающие потоки о возможности

 

продолжения работы

 

 

 

 

final void interrupt()

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

 

 

 

 

Соседние файлы в папке Заочники 2020-2021