java线程池自己掉进去的坑

java线程池的maximumPoolSize的生效条件真的是要注意下

在做防穿透cache的时候,有这样的以一个场景,平时需要的线程很少,偶尔会有比较高的并发,自己对Executors提供的几个方法都不怎么满意,决定自己写一个:

private static ExecutorService executorService = new ThreadPoolExecutor(1, 4,
            60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory)

但是后面发现,为什么一直是一个线程在跑呢?!!!
我明明设置最大线程是4,但是丝毫没有起作用
最大线程是在队列满了的情况才会生效,这里的队列大小的是int的最大值,是不可能满的。
最后自己的修改版:
private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(4, 4,
       120L, TimeUnit.SECONDS,
        new LinkedBlockingQueue<Runnable>(), threadFactory);
static {
    executorService.allowCoreThreadTimeOut(true);
}

猜你喜欢

转载自huangyunbin.iteye.com/blog/2318829
今日推荐