public interface ChannelGroupFuture extends Future<java.lang.Void>, java.lang.Iterable<ChannelFuture>
ChannelGroup
操作的结果。
ChannelGroupFuture
由ChannelFuture
个 S的表示影响个体I / O操作的结果Channel
个 S IN的ChannelGroup
。
ChannelGroup
中的所有I / O操作都是异步的。 这意味着任何I / O调用都将立即返回,不能保证在请求结束时所请求的I / O操作已完成。 相反,您将返回一个ChannelGroupFuture
实例,该实例会告诉您何时请求的I / O操作已成功,失败或取消。
提供了各种方法让您检查I / O操作是否已完成,等待完成并检索I / O操作的结果。 它还允许您添加多个ChannelGroupFutureListener
,以便在I / O操作完成时收到通知。
addListener(GenericFutureListener)
至await()
addListener(GenericFutureListener)
至await()
之间获得I / O操作完成时的通知,并执行任何后续任务。
addListener(GenericFutureListener)
是非阻塞的。 它只是将指定的ChannelGroupFutureListener
添加到ChannelGroupFuture
,并且I / O线程将在与未来相关的I / O操作完成时通知监听器。 ChannelGroupFutureListener
可以产生最佳的性能和资源利用率,因为它根本不会阻塞,但如果您不习惯于事件驱动的编程,则实现顺序逻辑可能会非常棘手。
相比之下, await()
是一项阻止操作。 一旦调用,调用者线程将阻塞,直到完成所有I / O操作。 使用await()
实现顺序逻辑更容易,但调用者线程不必要地阻塞,直到完成所有I / O操作,并且线程间通知的代价相对较高。 此外,在下面描述的特定情况下存在死锁的可能性。
await()
内ChannelHandler
ChannelHandler
中的事件处理程序方法通常由I / O线程调用。 如果await()
由一个事件处理方法,它是由I / O线程调用调用时,它正在等待I / O操作可能永远无法完成,因为await()
可以阻止它正在等待I / O操作,这是一个死锁。
// BAD - NEVER DO THIS
@Override
public void messageReceived(ChannelHandlerContext
ctx, ShutdownMessage msg) {
ChannelGroup
allChannels = MyServer.getAllChannels();
ChannelGroupFuture
future = allChannels.close();
future.awaitUninterruptibly();
// Perform post-shutdown operation
// ...
}
// GOOD
@Override
public void messageReceived(ChannelHandlerContext ctx, ShutdownMessage msg) {
ChannelGroup
allChannels = MyServer.getAllChannels();
ChannelGroupFuture
future = allChannels.close();
future.addListener(new ChannelGroupFutureListener
() {
public void operationComplete(ChannelGroupFuture
future) {
// Perform post-closure operation
// ...
}
});
}
尽管存在上述缺点,但肯定会有更方便的方式拨打await()
。 在这种情况下,请确保在I / O线程中不要调用await()
。 否则,将提高IllegalStateException
以防止死锁。
Modifier and Type | Method and Description |
---|---|
ChannelGroupFuture |
addListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
将指定的侦听器添加到此将来。
|
ChannelGroupFuture |
addListeners(GenericFutureListener<? extends Future<? super java.lang.Void>>... listeners)
将指定的侦听器添加到此将来。
|
ChannelGroupFuture |
await()
等待这个未来的完成。
|
ChannelGroupFuture |
awaitUninterruptibly()
等待这个未来不中断地完成。
|
ChannelGroupException |
cause()
如果I / O操作失败,则返回失败的I / O操作的原因。
|
ChannelFuture |
find(Channel channel)
返回 ChannelFuture ,其与指定的相关联的单独的I / O操作的Channel 。
|
ChannelGroup |
group()
返回与此未来相关的 ChannelGroup 。
|
boolean |
isPartialFailure()
返回
true 当且仅当与此未来相关的I / O操作部分失败并取得一定成功时。
|
boolean |
isPartialSuccess()
当且仅当与此未来相关的I / O操作部分成功且出现故障时,才返回
true 。
|
boolean |
isSuccess()
当且仅当与此未来相关的所有I / O操作都成功完成而没有任何故障时才返回
true 。
|
java.util.Iterator<ChannelFuture> |
iterator()
返回 Iterator ,列举与此未来相关的所有ChannelFuture 。
|
ChannelGroupFuture |
removeListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
从此将来删除指定侦听器的第一个匹配项。
|
ChannelGroupFuture |
removeListeners(GenericFutureListener<? extends Future<? super java.lang.Void>>... listeners)
为将来的每个听众删除第一个匹配项。
|
ChannelGroupFuture |
sync()
等待这个未来,直到完成,并且在这个未来失败的时候重新引发失败的原因。
|
ChannelGroupFuture |
syncUninterruptibly()
等待这个未来,直到完成,并且在这个未来失败的时候重新引发失败的原因。
|
await, await, awaitUninterruptibly, awaitUninterruptibly, cancel, getNow, isCancellable
ChannelGroup group()
ChannelGroup
。
ChannelFuture find(Channel channel)
ChannelFuture
,其与指定的相关联的单独的I / O操作的Channel
。
ChannelFuture
如果找到。
null
否则。
boolean isSuccess()
true
。
ChannelGroupException cause()
Future
复制的描述
null
如果成功或未来尚未完成。
boolean isPartialSuccess()
true
。
boolean isPartialFailure()
true
当且仅当与此未来相关的I / O操作部分失败并取得一些成功时。
ChannelGroupFuture addListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
Future
复制的描述
ChannelGroupFuture addListeners(GenericFutureListener<? extends Future<? super java.lang.Void>>... listeners)
Future
复制的描述
ChannelGroupFuture removeListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
Future
复制的描述
ChannelGroupFuture removeListeners(GenericFutureListener<? extends Future<? super java.lang.Void>>... listeners)
Future
复制的描述
ChannelGroupFuture await() throws java.lang.InterruptedException
Future
java.lang.InterruptedException
- 如果当前线程中断
ChannelGroupFuture awaitUninterruptibly()
Future
复制的描述
InterruptedException
并以静默方式丢弃它。
ChannelGroupFuture syncUninterruptibly()
Future
ChannelGroupFuture sync() throws java.lang.InterruptedException
Future
java.lang.InterruptedException
java.util.Iterator<ChannelFuture> iterator()
Iterator
,列举所有ChannelFuture
这是与此相关的未来秒。
请注意,返回的Iterator
是不可修改的,这意味着ChannelFuture
不能从未来移除。
iterator
在界面
java.lang.Iterable<ChannelFuture>
Copyright © 2008–2018 The Netty Project. All rights reserved.