Класс AbstractInterruptibleChannel
- java.lang.Object
-
- java.nio.channels.spi.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 |
AbstractInterruptibleChannel() Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
protected void |
begin() Помечает начало операции ввода-вывода, которая может блокироваться неопределённое время. |
void |
close() Закрывает этот канал. |
protected void |
end(boolean completed) Помечает конец операции ввода-вывода, которая может блокироваться неопределённое время. |
protected abstract void |
implCloseChannel() Закрывает этот канал. |
boolean |
isOpen() Указывает, открыт ли этот канал. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
AbstractInterruptibleChannel
protected AbstractInterruptibleChannel()
Инициализирует новый экземпляр этого класса.
Методы
close
public final void close()
throws IOException Закрывает этот канал.
Если канал уже закрыт, этот метод возвращает значение сразу же. В противном случае он помечает канал как закрытый, а затем вызывает метод implCloseChannel для завершения операции закрытия.
- Указано в:
-
closeв интерфейсеCloseable - Указано в:
-
closeв интерфейсеAutoCloseable - Указано в:
-
closeв интерфейсеChannel - Указано в:
-
closeв интерфейсеInterruptibleChannel - Исключения:
-
IOException- Если произошла ошибка ввода-вывода
implCloseChannel
protected abstract void implCloseChannel()
throws IOException Закрывает этот канал.
Этот метод вызывается методом close для выполнения фактической работы по закрытию канала. Этот метод вызывается только в том случае, если канал ещё не закрыт, и он никогда не вызывается более одного раза.
Реализация этого метода должна обеспечить, чтобы любой другой поток, заблокированный в операции ввода-вывода на этом канале, вернулся немедленно, либо сбросив исключение, либо вернув значение обычным способом.
- Исключения:
-
IOException- Если при закрытии канала произошла ошибка ввода-вывода
isOpen
public final boolean isOpen()
Описание скопировано из интерфейса: Channel
Указывает, открыт ли этот канал.
begin
protected final void begin()
Помечает начало операции ввода-вывода, которая может блокироваться неопределенно долго.
Этот метод следует вызывать совместно с методом end, используя блок try ... finally, как показано выше, для реализации асинхронного закрытия и прерывания для этого канала.
end
protected final void end(boolean completed)
throws AsynchronousCloseException Помечает конец операции ввода-вывода, которая может блокироваться неопределенно долго.
Этот метод следует вызывать совместно с методом begin, используя блок try ... finally, как показано выше, для реализации асинхронного закрытия и прерывания для этого канала.
- Параметры:
-
completed-trueесли и только если операция ввода-вывода завершилась успешно, то есть имела какой-либо эффект, видимый для вызывающего метода операции - Исключения:
-
AsynchronousCloseException- Если канал был асинхронно закрыт -
ClosedByInterruptException- Если поток, заблокированный в операции ввода-вывода, был прерван
© 1993, 2020, 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.