Интерфейс 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() Закрывает этот канал. |
Методы, унаследованные от интерфейса java.nio.channels.Channel
isOpen Методы
close
void close()
throws IOException Закрывает этот канал.
Любые выполняющиеся асинхронные операции на этом канале завершатся с исключением AsynchronousCloseException. После закрытия канала дальнейшие попытки инициировать асинхронные операции ввода-вывода завершатся немедленно с причиной ClosedChannelException.
Этот метод в остальном ведет себя точно так же, как указано в интерфейсе Channel.
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеChannel - Specified by:
-
closeв интерфейсеCloseable - Throws:
-
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.