Java线程池实现
电脑的CPU资源是有限的,任务的处理速度与线程数量之间并不是正相关。当线程数量过多,CPU要频繁的在不同线程切换,反而会引起处理性能的下降。线程池中最大的线程数,是考虑多种因素来事先设定的,比如硬件的条件,业务的类型等等。 当我们向一个固定大小的的线程池中请求一个线程时,当线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种策略又是如何实现的呢? 实际上,这些问题的处理并不复杂,底层的数据结构,就是队列(queue)。 一、Java线程池介绍 1,线程池的作用 限制系统中执行线程的数量。 减少了创建和销毁线程的次数,重复利用线程。 2,主要的类 Executor:执行线程的接口 ExecutorSerivce: 线程池接口 ThreadPoolExecutor :线程池类 Executors:常用线程池工厂 3,常用的线程池 配置线程池是比较复杂的过程,所有可以使用现有的线程池工厂生成常用的线程池: newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。为了合理利用资源,我们通常把定长池的长度设置为当前PC机获取cpu核心数:Runtime.getRuntime().availableProcessors():获取当前CPU核心数; newCachedThreadPool创建一个可缓存线程池