Java 在不同通道管道中共享ExecutionHandler

Java 在不同通道管道中共享ExecutionHandler,java,netty,Java,Netty,我的服务器有两个不同类型的客户端,它们具有不同的消息格式,所以服务器中有两个NioServerSocketChannelFactory,分别处理两个类型的客户端请求。这两种类型的客户端需要访问两个NioServerSocketChannelFactory处理程序中的同一个对象。我可以在两个通道管道中共享相同的OrderedMemoryAwareThreadPoolExecutor对象吗 例如: Channels.pipeline( concurrencyHandler, new

我的服务器有两个不同类型的客户端,它们具有不同的消息格式,所以服务器中有两个NioServerSocketChannelFactory,分别处理两个类型的客户端请求。这两种类型的客户端需要访问两个NioServerSocketChannelFactory处理程序中的同一个对象。我可以在两个通道管道中共享相同的OrderedMemoryAwareThreadPoolExecutor对象吗

例如:

Channels.pipeline(
    concurrencyHandler,
    new Handler1());
}

Channels.pipeline(
    concurrencyHandler,
    new Handler2());
}

OrderedMemoryAwareThreadPoolExecutor在handler1和2访问同一对象时是否会处理线程并发?

每个通道工厂应使用一个ExecutionHandler,因为OrderedMemoryAwareThreadPoolExecutor使用通道id查找给定通道的正确执行器。通道id仅在每个通道工厂中是唯一的,因此如果在不同的通道工厂中共享,可能会产生不良的副作用。

两个通道工厂中的Shared OrderedMemoryAwareThreadPoolExecutor无法在线程之间进行同步。通道有其独占的任务队列OrderedMemoryAwareThreadPoolExecutor,仅确保一个通道的事件(队列中的任务)有序执行。它不能证明双通道双任务队列中的任务是有序执行的。不同队列中的任务访问一个对象无法同步。

它使用通道对象作为密钥而不是通道id。我读取的代码是3.3.1,getChildExecutorKey返回一个通道对象。Trustin说OMATPE会关心线程同步,但我没有找到同步关键字或其他东西。它是怎么做到的?它使用LinkedTransferQueue来处理这个CAS@jean对不起,我没有得到你的移植。。如果您认为存在abug,请在我们的问题跟踪程序中打开一个问题