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