针对面试线程池

1、什么是线程池?
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程(提高线程复用,减少性能开销)。
线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中然后等待下一次分配任务。
2、为什么要用线程池?
本质上来讲,我们使用线程池主要就是为了减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务;节约应用内存(线程开的越多,消耗的内存也就越大,最后死机)
3、线程池的作用?
就是限制系统中执行线程的数量。根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。
4、线程池是如何处理这些批量任务?

  1. 如果线程数量未达到corePoolSize,则新建一个线程(核心线程)执行任务
  2. 如果线程数量达到了corePools,则将任务移入队列等待
  3. 如果队列已满,新建线程(非核心线程)执行任务
  4. 如果队列已满,总线程数又达到了maximumPoolSize,就会由RejectedExecutionHandler抛出异常

5、Java已经为我们提供了四种线程池
A:newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
B:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
C:newScheduledThreadPool 创建一个定长任务线程池,支持定时及周期性任务执行。
D:newSingleThreadExecutor 创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

你可能感兴趣的:(2019年)