Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ МИР.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
547 Кб
Скачать
☆

42 Классы Vector и Rectangle.

Массивы в Java имеют фиксированную длину и необходимо заранее определить его размер. Есть механизм, который позволяет задать массив переменной длины. Для этого используется класс Vector.

Первоначально он ограничен определенным количеством элементов. При его превышении вектор автоматически увеличивается, при удалении объектов уменьшается.

Имеется 2 стандартных конструкции:

1. без параметра. Задает вектор с параметром по умолчанию(размер 10элементов).

2. с параметром. Задает вектор с заданным количеством элементов.

При вызове конструктора Vector инициируется с нулевым значением.

Данный класс имеет следующие методы:

1. AddElement – с параметром ссылкой на объект, добавляет к вектору указанный объект;

2. Contains – возвращает значение истины, если вектор содержит указанный объект, иначе ложь;

3. elementAt – с целочисленным параметром, определяющим… ищет элемент по заданному индексу;

4. firstelement,lastelement – возвращает первый и последний элементы вектора типа Object;

5. size – возвращает количество элементов, содержащихся в векторе на данный момент;

6. removeelement – один параметр типа Object, удаляет указанный объект из вектора. Если вектор содержит несколько экземпляров данного объекта, то удаляется первый из них. Если удаляется удачно, то истина, иначе ложь.

Данный класс содержится в классе Java.util.

Класс Rectangle описывает прямоугольную область, задаваемую левой верхней вершиной и размерами по ширине и высоте.

Конструкторы класса:

1. без параметра – создается прямоугольная область в точке (0;0), высота 0, ширина 0.

2. 2 параметра – создается прямоугольная область в точке (0;0) с заданной шириной и высотой.

3. 4 параметра – в заданной точке и с заданными высотой и шириной.

Методы класса:

1.equals() – 1 параметр типа Object, возвращает истина, если параметр является объектом типа Rectangle и имеет те же координаты левого верхнего угла, высоту, ширину, что и данный объект.

2. mside() – 2 параметра, проверяет находится ли точка внутри данного прямоугольника. Истина-да.

3. move() – 2 параметра, перемещает прямоугольную область в соответствии с новыми заданными координатами левого верхнего угла.

4. reshape() – 4 параметра, перечерчивает заданную прямоугольную область с новыми параметрами.

5. resize() – 2 параметра, изменяет размеры прямоугольной области.

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

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

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

Для сравнения рассмотрим однопоточную среду. Эти системы используют следующий подход: эффективная работа с циклом обработки событий с буферизацией. В этой модели 1 поток управления выполняется в бесконечном цикле, накапливая в буфере одну очередь событий, решая, какое событие обрабатывать следующим. Так, если механизм буферизации заявляет о поступлении сигнала готовности файла для чтения, то из цикла событий управление будет передано соответствующему обработчику. Пока обработчик не вернет управление, никакое сообщение в системе не обрабатывается, и процессор работает вхолостую. Т.е. в этой среде, когда поток заблокирован из-за ожидания ресурса, прекращается и работа всей программы.

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

Потоки могут находиться в нескольких состояниях:

1. может выполняться;

2. может быть готовым к выполнению;

3. может выполняться, причем он может быть приостановлен и потом продолжен;

4. поток может быть заблокирован;

5. может быть завершен, после не может быть продолжен.

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

Приоритет используется для определения момента переключения между выполняемыми потоками (это т.н. контекстное переключение).

Его правила:

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

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

Если 2 потока с равными приоритетами претендуют на ресурсы, то java непосредственно эту ситуацию не обрабатывает (это происходит на уровне операционной системы).

Многопоточная система в java базируется на классе Thread и использует интерфейс Runnable. Класс Thread инкапсулирует методы необходимые для выполнения потока. При создании потока, программа либо реализует интерфейс Runnable, либо расширяет класс Thread.

При запуске программы в Java, в ней уже есть 1 поток – это главный поток программы. Он важен по двум причинам:

1. Он порождает дочерние потоки;

2. Он должен быть последним потоком при завершении работы программы.

У класса Thread есть метод Sleep() который приводит к тому, что поток, из которого он вызывается, приостанавливает выполнение на определенный период времени. У этого метода ест 2 формы: static void sleep(long милисек) throws InterruptedException;

static void sleep(long милисек, int наносек) throws InterruptedException;

В классе Thread определены методы, которые получают имя потока.

final void getName();

и устанавливают его имя: final void setName(String имя);