Класс 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
public final boolean isOpen()
Channel- Определено в:
-
isOpenв интерфейсеChannel - Возвращает:
-
trueесли и только если этот канал открыт
begin
protected final void begin()
end
protected final void end(boolean completed) throws AsynchronousCloseException
Этот метод следует вызывать совместно с методом begin, используя блок try ... finally, как показано выше, для реализации асинхронного закрытия и прерывания для этого канала.
- Параметры:
-
completed-trueесли и только если операция ввода-вывода успешно завершена, то есть, имела какое-либо воздействие, видимое для вызывающего операцию метода - Исключения:
-
AsynchronousCloseException- Если канал был асинхронно закрыт -
ClosedByInterruptException- Если поток, заблокированный в операции ввода-вывода, был прерван
© 1993, 2021, 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/17/docs/api/java.base/java/nio/channels/spi/AbstractInterruptibleChannel.html