ChannelGroup 和 ArrayList<Channel> 有什么区别?

What is the difference between ChannelGroup and ArrayList<Channel>?

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

ChannelGroup channels = new DefaultChannelGroup (GlobalEventExecutor.INSTANCE);

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

一个ChannelGroup基本上是一个"enhanced"列表。

对于普通的 Java 列表,您必须在频道关闭时手动注销频道,ChannelGroup 会为您完成此操作

如果要发送消息,您需要手动循环遍历普通的 java 列表,但是 ChannelGroup 带有自己的写入方法。如:

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

使用 ChannelGroup 基本上可以让你的生活更轻松,因为它有很多实用方法,来自 javadoc 的关闭示例:

recipients.close().awaitUninterruptibly();

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