Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ПСП.docx
Скачиваний:
15
Добавлен:
25.09.2019
Размер:
116.02 Кб
Скачать

27. Жизненный цикл потока

При выполнении программы объект класса Thread может быть в одном из 4 основных состояний: новый, работоспособный, неработоспособный, пассивный.

Поток может находится в одном из состояний, соответствующим элементам статики вложенного перечисления Thread State

NEW – поток создан, но еще не запущен.

RUNNABLE – поток выполняется.

BLOCKED – поток блокирован.

WAITING – поток ждет окончания работы другого потока.

TIMED_WAITING – поток некоторое время ждет окончания другого потока.

TERMINATED – поток завершен.

28. Управление потоками и планирование потоков

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

Запуск потока

Для запуска потока на выполнение вы должны вызвать метод start:

public void start();

Как только приложение вызывает этот метод для объекта класса Thread или для объекта класса, реализующего интерфейс Runnable, управление получает метод run, определенный в соответствующем классе. В первом случае метод run должен быть определен в классе (ссылка на него указана конструктору класса Thread), создающем поток, а во втором - в классе, реализующем интерфейс Runnable.

Остановка потока

Если приложение желает остановить поток нормальным неаварийным образом, то оно вызывает для соответствующего объекта метод stop:

public final void stop();

Остановленный поток не исчезает и может быть вновь запущен методом start.

И наконец, можно принудительно остановить и уничтожить поток методом destroy:

public void destroy();

Временная остановка и возобновление работы потока

С помощью одного из двух вариантов метода sleep вы можете задержать выполнение потока на заданное время:

public final void join(long ms);

public final void join(long ms, int ns);

В первом варианте время задержки задается в миллисекундах, а во втором - в миллисекундах и наносекундах. Учтите, однако, что системный таймер компьютера вырабатывает прерывания примерно 18,2 раза в секунду, что значительно снижает точность выполнения задержки.

Остановка текущего потока для того, чтобы управление было передано другому потоку

public static void yield();

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

29. Синхронизация и синхронизированные методы. Синхронизация блоков операторов

Очень часто возникает ситуация, когда несколько потоков, обращающихся к некоторому общему ресурсу, начинают мешать друг другу, более того они могут повредить этот общий ресурс. Например, когда 2 потока записывают информацию в файл, объект, поток.

Для предотвращения такой ситуации может использоваться ключевое слово synchronized.

Например

Public synchronized void whitiny (string str, int i){

//тело метода }

Синхронизация блоков операторов

Синхронизировать объект модно не только при помощи методов и модификаторов, но и при помощи синхронизации блока кода. В этом случае происходит блокировка объекта, указанного в инструкции synchronized и он становится недоступным для других синхронизированных методов и блоков.