在我的netty服务器中,我创建线程池如下所示。
ChannelFactory factory =
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(threadFactory),
Executors.newCachedThreadPool(threadFactory);有时,我注意到,在服务器处理了一定数量的连接之后,随后的连接等待一个优先线程完成。
从newCachedThreadPool的文档中,我假设线程池根据需要创建新线程。有人能帮助我理解为什么我的一些连接会被阻塞,直到先前的连接结束吗?netty会不会为新连接创建一个新线程,因为所有现有的线程都很忙吗?
我该怎么解决这个问题?
任何帮助都是非常感谢的!
发布于 2013-09-13 02:55:49
创建一个线程池,该池重用在共享无界队列上操作的固定数量的线程。
在任何时候,最多的nThreads线程都是活动的处理任务。
如果在所有线程都处于活动状态时提交了其他任务,它们将在队列中等待,直到线程可用为止。如果任何线程由于在关闭之前的执行过程中失败而终止,那么如果需要执行后续任务,将有一个新线程代替它。
池中的线程将存在,直到显式关闭为止。
来自Oracle for newCachedThreadPool!
所以线程号是由Executors.newCachedThreadPool固定的
在netty中,默认值是processer_number *2
:)
https://stackoverflow.com/questions/18741626
复制相似问题