Интерфейс 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, 2023, 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/21/docs/api/java.base/java/nio/channels/AsynchronousChannel.html