1、为什么要使用线程池?
创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。
这样频繁的创建线程和销毁线程,再加上业务工作线程,消耗系统资源的时间,可能
导致系统资源不足。(我们可以把创建和销毁的线程的过程去掉)
2、线程池有什么作用?
1、 提高效率 创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,
这要比需要的时候创建一个线程对象要快的多。
2、 方便管理 可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时
有该程序创建100个线程,每当有请求的时候,就分配一个线程去工作,如果刚好
并发有101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程
导致系统崩溃。
3、说说几种常见的线程池及使用场景
1、newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
2、newFixedThreadPool
创建一个定长线程池&#x