在做防穿透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); }