Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум_ОООП_для ДО (1).doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
755 Кб
Скачать
☆

Тема 8. Многопоточное программирование Интерфейсы в Java

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

Формальное определение интерфейса:

модификатор_доступа имя_интерфейса{

тип_возвращ._значения имя_метода1(список параметров);

тип_возвращ._значения имя_метода2(список параметров);

…….

тип_возвращ._значения имя_методаN(список параметров);

тип имя_final_переменной1 = значение;

тип имя_final_переменной2 = значение;

}

Интерфейсы имеют следующие ограничения:

    1. модификатор доступа может быть только public или не использоваться (тогда по умолчанию интерфейс доступен только членам пакета, в котором он объявлен);

    2. методы могут быть только абстрактными;

    3. компоненты-данные – это final;

    4. сами интерфейсы не могут иметь реализации методов;

Реализующие данный интерфейс классы отвечают за содержательную реализацию методов интерфейса, то есть в реализующих классах необходимо определить или реализовать каждый метод интерфейса.

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

Пример:

//объявление интерфейса

public interface My_int {

static final String str = “Test of interface”;

static final String str = “ Проба”;

abstract public int My_met(int switch);

}

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

class TestInt implements My_int

{ public int My_met(int switch);

{if (switch = 0)

return(0);

else return(switch);

}

public void f1() {…} //класс, реализующий интерфейс может

//создавать и другие методы

}

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

Многопоточность – это реализация процесса на основе параллельно выполняющихся потоков.

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

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

Правила переключения между потоками:

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

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

Лекция 9

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

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

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

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

Некоторые методы класса Thread() (класс, который используется для создания потоков):

getName() – получить имя потока;

getPriority() – получить приоритет потока;

isAlive() – определить, выполняется ли еще поток;

join() – ждать завершение потока;

run() – указать точку входа в поток;

sleep() – остановить поток на определенный период времени;

start() – запустить поток с помощью вызова его метода run();