Класс 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() |
Показывает, открыт ли этот канал. |
Подробное описание конструкторов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/spi/AbstractInterruptibleChannel.html