关注Java线程池的任务队列长度
Java 5.0 就开始自带线程池的实现,其中固定大小的线程池,对普通使用还是很好用的。就是 Executors.newFixedThreadPool ,指需要指定一个大小数目就可以。相对于其他几种方式,易于实现高效稳定的服务器。
但是好用归好用,一些需要非常细心的问题,还是需要关注的,尤其是高并发场景,7*24不间断运行场景下。本文就是把这些地方记录下来,在设计和实现时,在这些问题上务必不能马虎,因为这关系到稳定性和效率,且不易通过测试来排查。
(1)实现:
几种线程池,都是通过 ThreadPoolExecutor 来实现的,如下:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,BlockingQueue workQueue,RejectedExecutionHandler handler)newFixedThreadPool :
public static ExecutorService newFixedThreadPool(int paramInt){return new ThreadPoolExecutor(paramInt, paramInt, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());}
而 LinkedBlockingQueue的实现:
public LinkedBlockingQueue()
{
this(2147483647);
}
这个默认的构造函数,实