Spec-Zone.ru › OpenJDK 25

Класс 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

Краткое описание конструкторов

AbstractInterruptibleChannel()
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
protected final void begin()
Отмечает начало операции ввода-вывода, которая может заблокироваться на неопределённое время.
final void close()
Закрывает этот канал.
protected final void end(boolean completed)
Отмечает завершение операции ввода-вывода, которая может заблокироваться на неопределённое время.
protected abstract void implCloseChannel()
Закрывает этот канал.
final boolean isOpen()
Показывает, открыт ли этот канал.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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, используя блок try ... finally, как показано выше, чтобы реализовать асинхронное закрытие и прерывание этого канала.

end

protected final void end(boolean completed) throws AsynchronousCloseException
Отмечает завершение операции ввода-вывода, которая может заблокироваться на неопределённое время.

Этот метод следует вызывать вместе с методом begin, используя блок try ... finally, как показано выше, чтобы реализовать асинхронное закрытие и прерывание этого канала.

Параметры:
completed — true тогда и только тогда, когда операция ввода-вывода успешно завершилась, то есть оказала воздействие, видимое вызывающей стороне
Выбрасывает:
AsynchronousCloseException — если канал был асинхронно закрыт
ClosedByInterruptException — если поток, заблокированный в операции ввода-вывода, был прерван

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API