线程池产生原因:
创建很多线程造成的两个问题:
1.构建一个新的线程会涉及到与操作系统的交互,会消耗一定的系统资源,当使用完这些新创建的线程后,线程就会被销毁,然后当我们再创建的时候就会再次消耗系统资源,所以如果创建很多生命期很短的线程,就会消耗很大的系统资源,甚至给系统带来很大的压力。
2.现在不考虑重复创建很多线程造成的压力,单单从创建大量的线程并发执行任务这一点考虑,我们的系统能承受的线程数量是有限的,创建大量的线程会大大降低性能甚至是虚拟机崩溃。
所以这里为了解决创建多个线程造成的这两个问题是线程池的出生的意义。
线程池的作用:
1.减少重复创建线程造成的系统开销,线程池中的线程使用完后不会被销毁,当有新的任务时会继续使用线程池中的线程(除了只有一个线程的线程池(newSingleThreadExecutor),其他的线程池都有这种效果)
2.控制并发线程的数量,线程池可以固定线程池中有多少个线程,不会创建大量线程造成虚拟机崩溃(使用线程数固定的线程池(newFixedThreadPool))
线程池的种类:
(1)newCachedThreadPool:(带缓存的线程池)
必要时创建新线程;空闲线程会被保留60s
(2) newFixedThreadPool:(固定数量线程的线程池)
该线程池中的线程数量有参数决定
(3)newSingleThreadExecutor:(单个线程的线程池)
它在一个单个的线程中依次执行各个任务
(4)newScheduledThreadPool:(可控制延迟时间或者周期执行线程的线程池)
具体四个线程池的介绍:
newCachedThreadPool:该方法构建了一个线程池,对于每个任务,如果有空闲线程可用,立即让它执行任务,如果没有可用的空闲线程,则创建一个新线程。
newFixedThreadPool:该方法构建一个具有固定大小的线程池,如果提交的任务数多于空闲的线程数,那么把得不到服务的任务放置到队列中。当其他任务完成之后在运行它们。
newSingleThreadExecutor:是一个退化了的大小为1的线程池:有一个线程执行提交的任务,一个接一个。
版权声明:本文为博主原创文章,未经博主允许不得转载。