在我的netty服务器中,我按如下方式创建线程池。
ChannelFactory factory =
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(threadFactory),
Executors.newCachedThreadPool(threadFactory);
有时,我注意到在服务器处理了一定数量的连接后,后续连接会等待其中一个先验线程完成。
从newCachedThreadPool的文档中,我假设线程池根据需要创建新线程。有人可以帮助我理解为什么我的一些连接被阻塞直到先前的连接完成? netty不会为新连接创建新线程,因为所有现有连接都很忙吗?
我该如何解决这个问题?
感谢任何帮助!
答案 0 :(得分:1)
创建一个线程池,该线程池重用在共享无界队列中运行的固定数量的线程。
在任何时候,最多nThreads线程将是活动的处理任务。
如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。如果任何线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。
池中的线程将一直存在,直到明确关闭为止。
from Oracle Java Doc for newCachedThreadPool!
所以线程号由Executors.newCachedThreadPool
修复 netty默认号码中的是processer_number * 2
:)