Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

объект, вызывается метод run() целевого объекта и начинается выполнение потока из целевого объекта.

Если поток используется для выполнения какой-либо периодической работы, метод run()

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

осуществляется выход из цикла и метод run() возвращает управление, поток нормально завершает работу.

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

static void sleep(long milliseconds) throws InterruptedException — метод вынуждает текущий поток освободить ЦП и временно приостановить свое выполнение на указанный интервал.

При выполнении потоком метода sleep() проверяется, не вызвал ли другой поток для объекта данного потока метод interrupt(), и генерируется исключение InterruptedException, если поток находится в состоянии прерывания.

Необходимо обрабатывать исключение типа InterruptedException, которое может быть выброшено методом.

!!! void stop() — устаревший метод. В ранних версиях Java метод использовался для завершения работы соответствующего потока. В новой версии Java 2 корпорация Sun Microsystems не рекомендует использовать этот метод (из-за нежелательных побочных явлений). Для остановки работы потока данного объекта Thread рекомендуется присваивать ссылке на объект потока

значение null. Эту ссылку целесообразно использовать в выражении для проверки условия выхода из цикла в методе run(). После выполнения метода run() поток завершает работу, и объект потока подлежит удалению сборщиком мусора.

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

Расширение класса Thread

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

(см. примеры ParamBanner.java (1,2,3))

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

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

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

Когда следует использовать синхронизацию потоков?

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

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

29

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]