Pet*_*ker 5 java concurrency executor threadpool
我试图理解为Java 5的ThreadPoolExecutor指定单独的核心和最大池大小的重点.我的理解是,一旦队列满了,线程数就会增加,这似乎有点晚(至少有较大的队列).
是不是我很高兴为任务分配更多的线程,在这种情况下,我可能只是增加核心池大小; 或者我不是真的愿意这样做,在这种情况下我宁愿有更大的队列?什么是单独的核心和最大池大小有用的场景?
小智 2
不同之处在于,如果低于核心池大小,则每个新任务都会创建一个新线程,而不管池中的空闲线程如何。仅当队列已满且已满足核心池大小但仍低于最大值时,线程数才会增加。
一个完美的例子是,当您有一个系统时,您不知道它到底有多少并发负载(例如网络服务器)。此函数允许您指定一组核心线程,可能基于您的计算机拥有的核心数量,但允许比您预期更多的负载。
如果您的 I/O 负载比您预期的要多,并且池中的线程花费大量时间进行阻塞,那么这尤其有用。在这种情况下,您的队列可以轻松填满,而无需大量并发负载,并且可以通过添加几个新线程来服务更多并发请求来轻松修复该问题。