Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class AbstractInterruptibleChannel extends Object implements Channel, InterruptibleChannel
Этот класс инкапсулирует низкоуровневую машину, требуемую реализовывать асинхронное закрытие и прерывание каналов. Конкретный класс канала должен вызвать Параметр completed Конкретный класс канала должен также реализовать Этот класс выполняет синхронизацию, требуемую реализовывать begin
и end
методы прежде и после, соответственно, вызывая работу ввода-вывода, которая могла бы блокировать неопределенно. Чтобы гарантировать что end
метод всегда вызывается, эти методы должны использоваться в пределах try ... блок finally:
boolean completed = false;
try {
begin();
completed = ...; // Perform blocking I/O operation
return ...; // Return result
} finally {
end(completed);
}
end
метод говорит, имело ли работа ввода-вывода, фактически завершенная, то есть, ли это любой эффект, который будет видим к invoker. В случае работы, которая читает байты, например, этим параметром должен быть true, если, и только если, некоторые байты были фактически переданы в целевой буфер invoker. implCloseChannel
метод таким способом, который, если это вызывается, в то время как другой поток блокируется в собственной работе ввода-вывода на канал тогда, что работа сразу возвратится, или выдавая исключение или возвращаясь обычно. Если поток прерывается или канал, на который он блокируется, асинхронно закрывается тогда канал end
метод выдаст соответствующее исключение. Channel
спецификация. Реализации implCloseChannel
метод не должен синхронизироваться против других потоков, которые могли бы пытаться закрыть канал.
Модификатор | Конструктор и Описание |
---|---|
protected |
AbstractInterruptibleChannel()
Инициализирует новый экземпляр этого класса.
|
Модификатор и Тип | Метод и Описание |
---|---|
protected void |
begin()
Отмечает начало работы ввода-вывода, которая могла бы блокировать неопределенно.
|
void |
close()
Завершения этот канал.
|
protected void |
end(boolean completed)
Отмечает конец работы ввода-вывода, которая могла бы блокировать неопределенно.
|
protected abstract void |
implCloseChannel()
Завершения этот канал.
|
boolean |
isOpen()
Говорит, открыт ли этот канал.
|
protected AbstractInterruptibleChannel()
public final void close() throws IOException
Если канал был уже закрыт тогда, этот метод сразу возвращается. Иначе это отмечает канал как закрыто и затем вызывает implCloseChannel
метод, чтобы завершить операцию закрытия.
close
в интерфейсе Closeable
close
в интерфейсе AutoCloseable
close
в интерфейсе Channel
close
в интерфейсе InterruptibleChannel
IOException
- Если ошибка ввода-вывода происходитprotected abstract void implCloseChannel() throws IOException
Этот метод вызывается close
метод, чтобы выполнить фактическую работу закрытия канала. Этот метод только вызывается, если канал еще не был закрыт, и это никогда не вызывается не раз.
Реализация этого метода должна устроить любой другой поток, который блокируется в работе ввода-вывода на этот канал, чтобы сразу возвратиться, или выдавая исключение или возвращаясь обычно.
IOException
- Если ошибка ввода-вывода происходит, закрывая каналpublic final boolean isOpen()
Channel
protected final void begin()
protected final void end(boolean completed) throws AsynchronousCloseException
Этот метод должен быть вызван в тандеме с begin
метод, используя try ... блок finally как показано выше, чтобы реализовать асинхронное закрытие и прерывание для этого канала.
completed
- true, если, и только если, работа ввода-вывода, завершенная успешно, то есть, имела некоторый эффект, который будет видим к invoker работыAsynchronousCloseException
- Если канал был асинхронно закрытClosedByInterruptException
- Если поток, блокированный в работе ввода-вывода, был прерван
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.