Java Netty ChannelHandlerContext从不同线程写入

Java Netty ChannelHandlerContext从不同线程写入,java,multithreading,netty,Java,Multithreading,Netty,我正在使用Netty制作一个实时游戏,我有一个问题,关于在ChannelHandlerContext上使用write方法,它来自与ChannelHandler不同的线程 我在Java应用程序中有一个单独的线程池,我将从数据库中提取线程并执行游戏逻辑。我想使用BlockingQueue将请求提交到不同的线程,以传递播放机发送的ChannelHandlerContext和数据。然后,该线程将基于此更改游戏状态。完成后,我希望能够使用ChannelHandlerContextwrite方法将更改后的游

我正在使用Netty制作一个实时游戏,我有一个问题,关于在
ChannelHandlerContext
上使用write方法,它来自与
ChannelHandler
不同的线程

我在Java应用程序中有一个单独的线程池,我将从数据库中提取线程并执行游戏逻辑。我想使用
BlockingQueue
将请求提交到不同的线程,以传递播放机发送的
ChannelHandlerContext
和数据。然后,该线程将基于此更改游戏状态。完成后,我希望能够使用
ChannelHandlerContext
write方法将更改后的游戏状态写回给用户


如果我从单独的游戏逻辑线程执行此操作,我不希望write函数加重该线程的负担。如果我从那里调用write,它会生成自己的线程、使用游戏逻辑线程还是使用
ChannelHandler的
线程?

在这种情况下,将使用
ChannelHandler
线程。这是因为
ChannelHandlerContext.write
方法检查您所处的线程。如果从外部线程(而不是事件执行器线程)调用
ctx.write
方法,则
ctx.write
操作将提交到属于您上下文的线程

实际发生的事情可以简单地这样描述:

gameLogicPool.send(new Runnable() {
         //your logic here
         ctx.write(response);
         //ctx.write actually does this when executed from another thread:
         ctx.executor().execute(new Runnable() {
             //write happens here when you are in event executor already
             }
         );
    }
);

好啊因此,为了明确起见,从不同线程调用ctx.write将使用与我的通道相同的线程池,并且不会生成新线程或使用它当前所在的线程?