Класс AbstractInterruptibleChannel
- Все реализуемые интерфейсы:
Closeable, AutoCloseable, Channel, InterruptibleChannel
- Прямые известные подклассы:
FileChannel, SelectableChannel
public abstract class AbstractInterruptibleChannel extends Object implements Channel, InterruptibleChannel
Этот класс инкапсулирует низкоуровневые механизмы, необходимые для реализации асинхронного закрытия и прерывания каналов. Конкретный класс канала должен вызывать методы begin и end соответственно перед и после вызова операции ввода-вывода, которая может блокироваться на неопределённое время. Чтобы гарантировать, что метод end всегда вызывается, эти методы следует использовать в блоке try ... finally:
boolean completed = false;
try {
begin();
completed = ...; // Perform blocking I/O operation
return ...; // Return result
} finally {
end(completed);
}
Аргумент completed метода end указывает, завершилась ли фактически операция ввода-вывода, то есть оказала ли она какое-либо влияние, видимое для вызывающего её кода. Например, в случае операции чтения байтов этот аргумент должен иметь значение true тогда и только тогда, когда некоторые байты действительно были переданы в целевой буфер вызывающего кода.
Конкретный класс канала также должен реализовать метод implCloseChannel таким образом, чтобы при его вызове, когда другой поток заблокирован в нативной операции ввода-вывода на этом канале, эта операция немедленно завершалась либо выбрасывая исключение, либо возвращаясь обычным образом. Если поток прерван или канал, на котором он заблокирован, асинхронно закрыт, метод end канала выбросит соответствующее исключение.
Этот класс выполняет синхронизацию, необходимую для реализации спецификации Channel. Реализациям метода implCloseChannel не требуется синхронизироваться с другими потоками, которые могут пытаться закрыть канал.
- Начиная с:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected final void |
begin() |
Помечает начало операции ввода-вывода, которая может блокироваться на неопределённое время. |
final void |
close() |
Закрывает этот канал. |
protected final void |
end |
Помечает завершение операции ввода-вывода, которая может блокироваться на неопределённое время. |
protected abstract void |
implCloseChannel() |
Закрывает этот канал. |
final boolean |
isOpen() |
Показывает, открыт ли этот канал. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли какой-либо другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает значение хеш-кода для этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения определённого промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения определённого промежутка реального времени. |
Подробное описание конструкторов
AbstractInterruptibleChannel
protected AbstractInterruptibleChannel()
Подробное описание методов
close
public final void close() throws IOException
Если канал уже закрыт, этот метод немедленно возвращает управление. В противном случае он помечает канал как закрытый, а затем вызывает метод implCloseChannel для завершения операции закрытия.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеChannel - Определено в:
-
closeв интерфейсеCloseable - Определено в:
-
closeв интерфейсеInterruptibleChannel - Выбрасывает:
-
IOException— если возникает ошибка ввода-вывода
implCloseChannel
protected abstract void implCloseChannel() throws IOException
Этот метод вызывается методом close для выполнения фактического закрытия канала. Метод вызывается только в том случае, если канал ещё не был закрыт, и вызывается не более одного раза.
Реализация этого метода должна обеспечить немедленный возврат любого другого потока, заблокированного в операции ввода-вывода на этом канале, либо выбросив исключение, либо завершившись обычным образом.
- Выбрасывает:
-
IOException— если при закрытии канала возникает ошибка ввода-вывода
isOpen
begin
end
protected final void end(boolean completed) throws AsynchronousCloseException
Этот метод следует вызывать вместе с методом begin в блоке try ... finally, как показано выше, чтобы реализовать асинхронное закрытие и прерывание этого канала.
- Параметры:
-
completed—trueтогда и только тогда, когда операция ввода-вывода успешно завершилась, то есть оказала какое-либо влияние, видимое вызывающему её коду - Выбрасывает:
-
AsynchronousCloseException— если канал был асинхронно закрыт -
ClosedByInterruptException— если поток, заблокированный в операции ввода-вывода, был прерван
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.