目录
什么是线程池?
线程是操作系统进行资源分配和任务调度的最小单位,是计算机的宝贵资源,new thread(),调用start()方法java线程在创建和销毁的过程中消耗的资源是比较大的,为了减少在线程创建和销毁过程中的资源消耗就要实现线程的复用。在程序开发中池化技术是一种不错的复用方式,例如线程池、连接池、内存池等。我们会预先创建好一些昂贵的对象放入池中,在使用的时候直接获取,使用之后归还,还会通过一些策略调整池中对象数量实现池的动态伸缩。
怎么创建线程池?
java的executors类库中提供了多种快速创建线程池的方法,例如newFixedThreadPool(),newCachedThreadPool()等,但是我们尽量不要直接使用,《阿里java开发规约》中也直接规定了不能使用executors类库中的创建线程池方法,应该手动使用newThreadPoolExecutor来创建线程池。这是因为newFixedThreadPool(),newCachedThreadPool()创建的线程池都是无界的,在线程大量堆积的时候就会容易造成OOM,翻开newFixedThreadPool()的源码不难发现线程池的工作队列直接new了一个LinkedBlockingQueue,而默认构造方法的LinkedBlockingQueue是Integer.