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, isCancellableChannelGroup 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.