线程池原理和自定义线程池

自JDK1.5起,untils包提供了ExecutorService线程池的实现,主要目的就是为了重复利用线程,提高系统效率,我们知道线程的创建、启动及销毁都是比较占资源的,因此对线程的重复利用是一种非常好的程序设计习惯,加之系统创建线程的数量是有限的,线程的数量和系统的性能是一种抛物线关系,也就是说达到一定数量后,性能会降低很多。

线程池原理:

    所谓线程池通俗的理解就是有一个池子,里面存放着已经创建好的线程,当有任务提交给池子执行时,池子某个线程委以重任,如果任务较多,线程不足应付众多任务时,则需要自动扩充新的线程到池子。就好比池塘的水界线一样,任务较少,池子线程自动回收释放资源,为了能够异步提交任务和缓存违背未被处理的任务,需要有一个任务队列。具备以下要素

1、任务队列:用于缓存提交的任务

2、线程数量管理功能:一个线程池必须能够很好的管理和控制线程的数量,可通过如下三个参数实现,比如创建线程出事的线程数量init、线程池自动扩充时最大的线程数量max、在线程空闲时需要释放的线程但也要维护一定数量的活跃线程或者核心数量core,有了这三个参数就能控制池中的数量三者关系为:init<=core<=max

3、任务拒绝策略:如果线程的数量已经达到上限且队列已满,则需要相应的拒绝策略来通知任务者。

4、线程工厂:主要用于个性化定制线程,比如将线程设为守护线程和设置线程名称等。

5、QueueSize:任务队列主要存放提交的Runnable,但是为了防止内存溢出,需要有limit数量对其控制。

6、keepedalive时间:该时间主要决定线程各个重要参数自动维护的时间间隔。

猜你喜欢

转载自blog.csdn.net/qq_40826106/article/details/86493128