Прерывание потока
В некоторых методах класса Thread упоминается прерывание (interrupting) потока. Соответствующие методы зарезервированы для возможности, которая вскоре будет включена в Java. На момент написания этой книги они еще не полностью реализованы; попытка их вызова приводит к возбуждению исключения NoSuchMethodError и уничтожению вызывающего потока. Вполне возможно, что к тому моменту, когда вы будете читать эту книгу, эти методы уже будут реализованы. В данном разделе приводится их краткий обзор.
Концепция “прерывания” оказывается полезной, если выполняемому потоку необходимо предоставить некоторую степень контроля над моментом обработки события. Например, в цикле вывода может понадобиться информация из базы данных, извлекаемая посредством транзакции; если при этом поступает запрос на прекращение работы, желательно дождаться нормального завершения транзакции. Поток пользовательского интерфейса может реализовать такой запрос, прерывая поток вывода и давая ему возможность дождаться конца транзакции. Подобная схема будет хорошо работать лишь в том случае, если поток вывода “хорошо себя ведет” и в конце каждой транзакции проверяет, не поступил ли запрос на прерывание (и прекращает работу в этом случае).
Прерывание потока в общем случае не должно влиять на его работу, однако некоторые методы (такие, как sleep или wait) возбуждают исключение InterruptedException. Если в вашем потоке во время прерывания выполнялся один из таких методов, то будет возбуждено прерывание Interrupted Exception.
Для работы с прерываниями используются несколько методов. Метод interrupt посылает прерывание в поток; метод isInterrupted проверяет факт прерывания потока; статический метод interrupted проверяет, прерывался ли текущий поток.
Дата добавления: 2015-02-16; просмотров: 723;