跨多个ServerBootstraps使用相同的线程池是否安全?

时间:2012-11-29 10:57:05

标签: java tcp netty

我有一个基于netty的应用程序,它可以监听多个tcp端口。所以每个端口都像这样初始化

bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(), Executors.newFixedThreadPool(Settings.getDemuxPoolSize()),
            Settings.getDemuxPoolSize()));

但是有这么多线程池(我有很多开放的TCP端口)对我来说是一种浪费。

问题是:在Netty中跨多个服务器引导使用SAME线程池是否安全? (也许一些线程本地频道引用等?)

1 个答案:

答案 0 :(得分:1)

最好创建一个WorkerPool,然后在不同的NioServerSocketChannelFactory实例之间共享它。因此,您可以为不同的ChannelFactory实例使用相同的Worker。

类似的东西:

WorkerPool<NioWorker> workerPool = new NioWorkerPool<NioWorker>(Executors.newCachedThreadPool(), size);
NioServerSocketChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool);
NioServerSocketChannelFactory factory2 = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), workerPool);
....