首页 > 解决方案 > ChannelGroup 和 ArrayList 有什么区别?

问题描述

我正在使用 Netty 4.x,我想知道它们之间有什么区别。

ChannelGroup channels = new DefaultChannelGroup (GlobalEventExecutor.INSTANCE);

ArrayList<Channel> channels = new ArrayList<>()

标签: javanetty

解决方案


AChannelGroup基本上是一个“增强”列表。

使用普通的 Java 列表,您必须在频道关闭时手动取消注册,ChannelGroup这是为您做的

如果要发送消息,则需要手动遍历普通的 java 列表,但是ChannelGroup带有自己的 write 方法。例如:

ChannelGroup recipients = ...;
recipients.write(Unpooled.copiedBuffer(
     "Service will shut down for maintenance in 5 minutes.",
     CharsetUtil.UTF_8));

使用 aChannelGroup基本上可以让您的生活更轻松,因为它带有许多实用方法,javadoc中的一个示例用于关闭:

recipients.close().awaitUninterruptibly();

如果你想在使用时关闭所有通道ArrayList,你需要遍历所有通道,调用它们的 close 方法,然后再次循环并等待它们的关闭期货,确保你在循环时永远不会修改列表


推荐阅读