java线程池面试题有哪些?java线程池面试题汇总

java线程池是java中重要知识点,作为程序员需要掌握java线程池相关知识,这样才能在工作中应用,今天我们为大家分享一些java线程池面试题,为面试java岗位的人员提供一些帮助!

1.什么是线程池?

线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2.说说几种常见的线程池及使用场景有哪些?

(1)newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

(2)newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

(3)newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

(4)newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。

3.线程池都有哪几种工作队列?

(1)ArrayBlockingQueue

是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。

(2)LinkedBlockingQueue

一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列

(3)SynchronousQueue

一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。

(4)PriorityBlockingQueue

一个具有优先级的无限阻塞队列。

4. 线程池的工作原理是什么?

当线程池中有任务需要执行时,线程池会判断如果线程数量没有超过核心数量就会新建线程池进行任务执行,如果线程池中的线程数量已经超过核心线程数,这时候任务就会被放入任务队列中排队等待执行;如果任务队列超过最大队列数,并且线程池没有达到最大线程数,就会新建线程来执行任务;如果超过了最大线程数,就会执行拒绝执行策略。

5.线程和进程有什么区别?

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。

这些都是在面试中经常问到的java线程池面试题,大家一定要掌握好这方面知识,如果觉得这些面试题有用,可以收藏起来,最后大家如果想要了解更多java面试题知识,敬请关注奇Q工具网。

推荐阅读:

java培训网课多少钱?java线上线下授课模式如何选择?

javabean分为几种?javabean有哪些功能特点?

java高级程序员有哪些要求?需要掌握哪些知识?