不管size多大,CyclicBarrier 和线程池使用时,到了线程核心数就不增加了
@GetMapping("testLockPool")
public void testLockPool(@RequestParam String a, String b, Integer size) {
if(size == null) {
size = 10;
}
CyclicBarrier cyclicBarrier = new CyclicBarrier(size,()->{
System.out.println("放行!!!");
});
for(int i=0; i<size; i++) {
threadPool.execute(() -> {
System.out.println("start");
try {
cyclicBarrier.await();// 阻塞
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("通过");
});
}
}
放行!!!
通过
通过
原因:当需要任务大于核心线程数时候,就开始把任务往存储任务的队列里,当存储队列满了的话,就开始增加线程池创建的线程数量
本文探讨了在使用CyclicBarrier与线程池时,为何当任务数量超过核心线程数时,不再自动增加线程。作者通过示例展示了如何在大小可变的任务队列中控制线程增长,并解释了这一行为背后的原理。
579

被折叠的 条评论
为什么被折叠?



