Java 从Netty处理程序内部访问Netty server实例

Java 从Netty处理程序内部访问Netty server实例,java,netty,Java,Netty,我正在为多人游戏编写一个Netty服务器,我不确定是否需要以某种方式同步存在于服务器中但由ChannelHandler访问的变量 在服务器级别,我使用ArrayList存储服务器将要服务的不同匹配项 每个匹配将引用2个通道(我为匹配存储每个通道的ChannelHandlerContetx) 当我创建从SimpleChannelInboundHandler扩展而来的ChannelHandler时,我将服务器的一个实例传递给构造函数,并将服务器作为实例变量存储在处理程序中 触发channelActi

我正在为多人游戏编写一个Netty服务器,我不确定是否需要以某种方式同步存在于服务器中但由ChannelHandler访问的变量

在服务器级别,我使用ArrayList存储服务器将要服务的不同匹配项

每个匹配将引用2个通道(我为匹配存储每个通道的ChannelHandlerContetx)

当我创建从SimpleChannelInboundHandler扩展而来的ChannelHandler时,我将服务器的一个实例传递给构造函数,并将服务器作为实例变量存储在处理程序中

触发channelActive时,ChannerHandler将在ArrayList(位于服务器实例中)中搜索处于“等待”状态的匹配项。如果它找到一个,它将绑定到它并更改匹配状态。如果未创建新的匹配项,则通道将绑定到该匹配项,使其处于等待状态

我知道通道是线程安全的。但在这里,不同的通道正在访问同一服务器的ArrayList实例

在这种情况下,我应该同步对ArrayList的访问吗?


请注意,如果这增加了我的问题:由于我将在后端拥有一个数据库,因此在创建处理程序时,我将在.addLast()方法中传递一个DefaultEventExecutor。

如果您有多个eventLoop,则将跨多个eventLoop并发访问静态ArrayList。因此,是的,您应该注意同步对ArrayList的访问