一、线程池是什么
顾名思义,好比一个存放线程的池子,我们可以联想水池。线程池意味着可以储存线程,并让池内的线程得以复用,如果池内的某一个线程执行完了,并不会直接销毁它有生命周期,可以存活一些时间,待到下一个任务来时,它会复用这个在等待中的线程,避免了再去创建线程增加的额外系统开销。
二、为什么使用线程池及它的作用
创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。这样频繁的创建线程和销毁线程,再加上业务工作线程,消耗系统资源的时间,可能导致系统资源不足。
线程池作用就是限制系统中执行线程的数量。
1)提高效率创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2)方便管理可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时有该程序创建100个线程
每当有请求的时候,就分配一个线程去工作,
如果刚好并发有101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程导致系统崩溃。
三、创建线程池的几种方式
1)通过Executors工具类提供的不同静态方法创建线程池,如下所示:
Executors.newSingleThreadExecutor()
创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIF0,LIFO,优先级)执行。
Executors.newFixedThreadPool()
创建一个固定大小的线程池,可控制线程最大并发数