Интерфейс AsynchronousChannel

Все суперинтерфейсы:
AutoCloseable, Channel, Closeable
Все известные подинтерфейсы:
AsynchronousByteChannel
Все известные реализующие классы:
AsynchronousFileChannel, AsynchronousServerSocketChannel, AsynchronousSocketChannel
public interface AsynchronousChannel
extends Channel

Канал, поддерживающий асинхронные операции ввода-вывода. Операции асинхронного ввода-вывода обычно имеют одну из двух форм:

  1. Future<V> operation(...)
  2. void operation(... A attachment, CompletionHandler<V,? super A> handler)
где операция — имя операции ввода-вывода (например, чтение или запись), V — тип результата операции ввода-вывода, а A — тип объекта, прикрепленного к операции ввода-вывода для предоставления контекста при получении результата. Прикрепление важно в случаях, когда используется бессостояниевый CompletionHandler для получения результатов многих операций ввода-вывода.

В первом случае могут использоваться методы, определенные интерфейсом Future, для проверки завершения операции, ожидания её завершения и получения результата. Во втором случае, при завершении или ошибке операции ввода-вывода вызывается CompletionHandler для обработки результата.

Канал, реализующий этот интерфейс, может быть асинхронно закрыт: Если операция ввода-вывода выполняется на канале, и вызывается метод close канала, то операция ввода-вывода завершается с исключением AsynchronousCloseException.

Асинхронные каналы безопасны для использования несколькими потоками. Некоторые реализации каналов могут поддерживать одновременное чтение и запись, но могут не допускать более одной операции чтения и одной операции записи в ожидании.

Отмена

Интерфейс Future определяет метод cancel для отмены выполнения. Это приводит к тому, что все потоки, ожидающие результата операции ввода-вывода, выбрасывают CancellationException. Возможность отмены подлежащей операции ввода-вывода зависит от реализации и поэтому не специфицируется. В тех случаях, когда отмена оставляет канал или связанный с ним объект в несогласованном состоянии, канал переходит в зависящее от реализации состояние ошибки, которое предотвращает дальнейшие попытки инициировать операции ввода-вывода, аналогичные отменённой операции. Например, если операция чтения отменяется, но реализация не может гарантировать, что байты не были прочитаны из канала, то она переводит канал в состояние ошибки; дальнейшие попытки инициировать операцию read вызывают исключение со случайной причиной. Аналогично, если операция записи отменяется, но реализация не может гарантировать, что байты не были записаны в канал, то последующие попытки инициировать операцию write завершаются исключением со случайной причиной.

В случае, когда метод cancel вызывается с параметром mayInterruptIfRunning установленным в true, операция ввода-вывода может быть прервана закрытием канала. В этом случае все потоки, ожидающие результата операции ввода-вывода, бросают CancellationException, а любые другие ожидающие операции ввода-вывода на канале завершаются с исключением AsynchronousCloseException.

В случае, когда вызывается метод cancel для отмены операций чтения или записи, рекомендуется удалять все буферы, используемые в операциях ввода-вывода, или позаботиться о том, чтобы к буферам не обращались, пока канал остаётся открытым.

С:
1.7

Методы

Модификатор и тип Метод Описание
void close()

Закрывает этот канал.

Методы, объявленные в интерфейсе java.nio.channels.Channel

isOpen

Методы

close

void close()
    throws IOException

Закрывает этот канал.

Любые незавершенные асинхронные операции на этом канале завершатся исключением AsynchronousCloseException. После закрытия канала дальнейшие попытки инициировать асинхронные операции ввода-вывода завершатся сразу с исключением ClosedChannelException.

В остальном этот метод ведет себя точно так же, как и указано в интерфейсе Channel.

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Channel
Определено в:
close в интерфейсе Closeable
Выбрасывает:
IOException - Если произошла ошибка ввода-вывода

© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/channels/AsynchronousChannel.html

Spec-Zone .ru
спецификации, руководства, описания, API