Интерфейс AsynchronousChannel
- Все суперинтерфейсы:
-
AutoCloseable,Channel,Closeable
- Все известные подинтерфейсы:
AsynchronousByteChannel
- Все известные реализующие классы:
-
AsynchronousFileChannel,AsynchronousServerSocketChannel,AsynchronousSocketChannel
public interface AsynchronousChannel extends Channel
Future<V> operation(...)void operation(... A attachment,
CompletionHandler<V,? super A> handler)
CompletionHandler для обработки результата многих операций ввода-вывода. В первом случае могут использоваться методы, определенные интерфейсом Future, чтобы проверить, завершилась ли операция, дождаться её завершения и получить результат. Во втором случае вызывается CompletionHandler, чтобы обработать результат операции ввода-вывода при ее завершении или ошибке.
Канал, реализующий этот интерфейс, является закрываемым асинхронно: если операция ввода-вывода выполняется в канале, а метод close канала вызывается, то операция ввода-вывода завершается с исключением AsynchronousCloseException.
Асинхронные каналы безопасны для использования несколькими потоками. Некоторые реализации каналов могут поддерживать одновременное чтение и запись, но могут не допускать более одной операции чтения и одной операции записи, выполняемой одновременно.
Отмена
Интерфейс Future определяет метод cancel для отмены выполнения. Это приводит к тому, что все потоки, ожидающие результата операции ввода-вывода, выбрасывают CancellationException. Возможность отмены базовой операции ввода-вывода сильно зависит от реализации и поэтому не определена. Если отмена приводит к тому, что канал или сущность, к которой он подключен, оказывается в несогласованном состоянии, то канал переводится в состояние ошибки, зависящее от реализации, что предотвращает дальнейшие попытки инициировать операции ввода-вывода, аналогичные операции, которая была отменена. Например, если операция чтения отменена, но реализация не может гарантировать, что байты не были прочитаны из канала, то она переводит канал в состояние ошибки; дальнейшие попытки инициировать read операцию приведут к тому, что будет брошено неопределенное исключение времени выполнения. Аналогично, если операция записи отменена, но реализация не может гарантировать, что байты не были записаны в канал, последующие попытки инициировать write завершатся с неопределенным исключением времени выполнения.
Если метод cancel вызывается с параметром
mayInterruptIfRunning установленным в true, то операция ввода-вывода может быть прервана закрытием канала. В этом случае все потоки, ожидающие результата операции ввода-вывода, выбрасывают CancellationException, и все другие операции ввода-вывода, выполняющиеся в канале, завершаются с исключением AsynchronousCloseException.
При вызове метода cancel для отмены операций чтения или записи рекомендуется удалить все буферы, используемые в операциях ввода-вывода, или позаботиться о том, чтобы к буферам не было доступа, пока канал остается открытым.
- Since:
- 1.7
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает этот канал. |
Подробное описание методов
close
void close() throws IOException
Любые выполняемые асинхронные операции в этом канале завершатся исключением AsynchronousCloseException. После закрытия канала дальнейшие попытки инициировать асинхронные операции ввода-вывода завершатся немедленно с исключением ClosedChannelException.
Этот метод в остальном ведет себя точно так же, как указано в интерфейсе Channel.
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеChannel - Specified by:
-
closeв интерфейсеCloseable - Throws:
-
IOException- Если возникает ошибка ввода-вывода
© 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/AsynchronousChannel.html