Иногда полезных поток полезны. Например, отдельный поток можно использовать для отображения времени дня. Если пользователь не хочет использовать часы, поток приостановлен. В любом случае, приостановка потока очень проста, и как только он приостановлен, перезапуск потока также является простым вопросом.
Механизмы для приостановки, прекращения и восстановления потоков различаются по Java 2 и более ранним версиям. Хотя вы используете Java 2 для написания кода, вам все равно нужно понять, как эти операции были выполнены в ранней среде Java. Например, вам может потребоваться обновить или поддерживать старый код. Вы также должны понять, почему Java 2 имеет такие изменения. По этим причинам следующее описывает исходный метод выполнения управления потоком, за которым следует метод Java 2.
Пауза, восстановление и прекращение потоков в Java 1.1 или раньше
Перед версией Java2 в программе используется потоковое приостановлено () и resume () для паузы и перезапуска потоков. Они в форме:
Final void Survend () Final Void Resume ()
В следующей процедуре описывается эти методы:
// SUSTER () и RESUME (). Out .println ("Новый поток:" + t); i> 0; ":::::::::::::::::::::: ::::::: newThread («One»); . Sleep (1000); Sleep (1000); Подождите, чтобы заканчиваться println ("Основной поток прерван"); Часть вывода программы заключается в следующем:
Новая нить: нить [One, 5, Main] One: 15New Thread: Thread [Two, 5, Main] два: 15one: 14two: 14one: 13two: 13one: 12two: 11two: 11 -й нить OneTwo: 10two: 9two: 8two: 7two: 6 -resumbing Thread Threadsing Thread Twoone: 10one: 9one: 8one: 7one: 6 -й нить двойной. .Main Thread выходит.
Класс потоков также определяет Stop () для прекращения потока. Его форма заключается в следующем:
void Stop ()
Как только поток будет прекращен, его нельзя возобновить Resume () для продолжения работы.
Приостановить, восстановить и прекращать потоки на Java
Методы Defened Thread Supesdend (), Resume () и Stop () кажутся идеальными и удобными способами управления потоками, и их нельзя использовать в новых версиях программ Java. Вот причины. Метод приостановки () класса потока не предпочитается в Java2, потому что Suprend () иногда может вызывать серьезные сбои системы. Предполагая, что поток для критической структуры данных заблокирован, если поток приостановлен там, заблокированные потоки не отказываются от контроля над ресурсом. Другие потоки, ожидающие этих ресурсов, могут быть запущены.
Метод Resume () также не утвержден. Это не вызывает проблем, но не может использоваться независимо без метода приостановки (). Метод STOP () класса потока также выступает в Java 2. Это потому, что этот метод может вызвать серьезные сбои системы. Представьте себе, что тема пишет точную и важную структуру данных и заполняет только одну часть ее. Если поток заканчивается в данный момент, структура данных может оставаться в состоянии сбоя.
Поскольку в Java 2, методы Survend (), Resume () и Stop () нельзя использовать для управления потоками, вы можете подумать, что нет способа остановиться, восстановить и конечные потоки. На самом деле, это не так. Вместо этого поток должен быть спроектирован таким образом, чтобы метод run () периодически проверял, чтобы определить, должен ли поток быть приостановлен, возобновить или прекращать свое собственное выполнение. Предполагается, что это делается путем установления переменной флага, указывающей состояние потока. Пока флаг установлен для «запуска», метод run () должен продолжать выполняться потоком. Если флаг «приостановлен», поток должен быть приостановлен. Если установить для «остановки», поток должен быть прекращен.
Конечно, есть много способов написать такой код, но центральная тема должна быть одинаковой для всех программ.
Следующие примеры показывают, как методы wait () и notify () унаследовались от контроля объекта. Выполнение потоков. Этот пример очень похож на программу, упомянутую ранее. Однако ни один из методов, которые не одобрены, не является полезным. Давайте подумаем о выполнении программы.
Класс NewTread содержит переменную экземпляров, используемый для управления выполнением потока. Он инициализируется ложным конструктором. Метод run () содержит блок, который контролирует объявление синхронизации суспендента. Если переменная верна, метод wait () вызывается для приостановки потока. Метод mysuspend () устанавливает Suprendflag на True. Метод Myresume () устанавливает SupesdendFlag для false и вызывает метод notify (), чтобы вызвать поток. Наконец, метод Main () модифицируется, чтобы вызвать методы mysuspend () и myresume ().
// Приостановка и восстановление потока для Java2class. Out .println ("Новый поток:" + t); t i = 15; }}} catch (прерывание Exception e) {System.out.println (имя + "прервано."); void myresume () {supplyflag = false; ; Тейд один "); ob2.mysuspend (); System.out.println (" подвеска два "); thread.sleep (1000); ob2.myresume (); System.out.println (" Возобновление потока t wo ") ; t.join (); }Вывод этой программы такой же, как и у предыдущей программы. Позже в этой книге вы увидите больше примеров использования механизма Java 2 для управления потоками. Хотя этот механизм не такой «чистый», как старый метод, однако, это способ гарантировать, что никаких ошибок не возникает во время выполнения. Это метод, который должен принять весь новый код.