Java并发包中线程池的种类和特点介绍
Java并发包提供了包括原子量、并发集合、同步器、可重入锁、线程池等强大工具这里学习一下线程池的种类和特性介绍。
如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力。而且线程的创建和销毁是非常耗费资源的操作。如果我们在系统启动时就维持几个固定的线程,如果有新的任务到来就分配这些线程来执行操作,当操作完成后继续等待新的任务到来,这样我们就有了一个线程池。
通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于ExecutorService类型或者不同的初始参数,Executors目前提供了五种不同的线程池创建配置
①newCachedThreaPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓村线程可重用时,就会创建新的工作线程;如果线程闲置的时间超过60秒,则被终止并移出缓存;长时间闲置时,这种线程池并不会消耗什么资源,其内部使用SynchronousQueue作为工作队列
②newFixedThreadPool(), 拥有固定线程数的线程池,背后使用的是无界的工作队列,可以通过参数设置线程池的大小,可以随意设置,也可以和cpu的核数量保持一致,获取cpu的核数int cpuNums=Runtime.getRuntime().availableProcessors();
③newSingleThreadExecutor(),它的特点在于工作线程数目被限制为1,因此所有提交的任务是顺序执行
④newSingleThreadScheduledExcutor()和newScheduleThreadPool(int corePoolSize),可以定时或者周期性的工作调度,区别在单一工作线程还是多个工作线程
⑤newWorkStealingPool(int parallelism),Java8才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行的处理任务,不保证处理顺序