面试线程池
1、为什么用线程池
1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
2、
3、
4、
三种排队策略:
直接传递:通常使用SynchronousQueue队列,直接将任务转交给线程,而不进行任务的存储。如果没有线程接收任务,那么任务入队会失败,所以此种情况,会直接创建新的线程。这种策略,对于处理任务间有依赖关系的情况,避免了队列任务遍历。直接传递策略需要相应的无界线程池策略支持,以避免任务被丢弃,拒绝。者反过来也可能引发当处理速度小于任务到达速度时,线程池的无限增长。
无界队列:通常使用LinkedBlockingQueue,不预定义容量。因为队列无界,所以,核心线程都忙时,不会创建新的线程,可能导致任务的无限堆积,无界队列情况下,线程池最大值配置将不起作用。无界队列情况适用于任务间没有联系,各自肚独自运行的场景。例如,对于web系统,可以用来处理突发请求平滑处理。
有界队列:例如ArrayBlockingQueue,可以避免使用无界线程池时的的资源耗尽。但是,却不利于对请求处理的协调和控制。队列大小和线程池最大值参数之间会进行平衡处理。如:大容量队列和小容量线程池的使用可以最小化cpu使用,系统资源耗费及线程间上下文切换带来的负担。但是会造成吞吐量的降低,也无法充分使用系统的调度能力;相应的使用小队列则需要较大的线程池容量,可能造成cpu繁忙,进而造成系统无法调度现象,也会造成系统吞吐量的降低。
corePoolSize - 池中所保存的线程数,包括空闲线程。
maximumPoolSize-池中允许的最大线程数。
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit - keepAliveTime 参数的时间单位。
workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute方法提交的 Runnable任务。
threadFactory - 执行程序创建新线程时使用的工厂。
handler - 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。
任务丢弃:
任务丢弃:
Executor关闭时,提交的任务会被丢弃;使用有界队列及有界线程池时,并且都已达到边界值时,提交的任务会被丢弃。任务丢弃会通过 RejectedExecutionHandler执行相应的丢弃策略。
默认AbortPolicy:抛出运行时异常
CallerRunsPolicy:使用提交任务的线程执行任务,这种策略提供了一种反馈机制,减缓了新任务的提交速度。
DiscardPolicy:直接丢弃任务。
DiscardOldestPolicy:丢弃任务队列头部的任务。
相关推荐
线程、多线程和线程池面试专题 一、线程的概念和创建方式 1. 线程的概念:线程是操作系统能够进行运算调度的最小单位,它是进程中的一个执行流程。 2. 创建线程的方式:有三种方式创建线程,即继承Thread类、实现...
在Java面试中,Spring框架是不可或缺的知识点,尤其在涉及到线程池的面试题时,对Spring的理解深度往往成为衡量候选人技术能力的重要标准。本文将深入探讨Spring框架的核心原理、重要概念以及与线程池相关的知识。 ...
在求职面试过程中,掌握线程池的原理和使用是后端开发人员的基本要求。 线程池通过ThreadPoolExecutor来创建,它是一个灵活的线程池实现,提供了多个参数来控制线程池的运行行为。核心参数包括: - corePoolSize:...
线程池是一种多线程处理形式,它将多个任务分发到一组预先创建的线程中,而不是为每个任务创建新的线程。这种方式可以有效管理系统资源,避免频繁创建和销毁线程导致的开销。在C++11中,线程库(thread library)被...
Java线程池是Java多线程编程中一个重要的概念,它是通过Executor框架来实现的,主要目的是为了提高并发性能和管理线程资源。线程池的使用可以避免频繁地创建和销毁线程,降低了系统资源的消耗,同时也能有效地控制...
Java线程池是一种高效管理线程资源的工具,它的出现是为了应对多线程编程中频繁创建和销毁线程带来的性能开销以及资源消耗。在Java中,通过使用线程池,我们可以预先创建一定数量的线程,这些线程在空闲时可以被复用...
使用mindmaster打开
### 史上最强多线程面试44题和答案解析 #### 1. 并发编程三要素 并发编程中的三个关键概念分别是原子性、可见性和有序性。 - **原子性**:指的是一个操作或者一组操作,它们在执行过程中不能被其他任何操作打断。...
在面试中,关于线程、多线程和线程池的问题可能包括:线程的生命周期、线程的五种状态、死锁的四个必要条件、线程池的工作原理、Java并发包中的工具类如`CountDownLatch`、`CyclicBarrier`、`Semaphore`的用途,以及...
4. **多线程**:Java提供了丰富的多线程支持,面试中会考察线程的创建、同步机制(synchronized、Lock)、死锁、线程池等。理解线程状态转换图,掌握线程安全问题的解决方案,如volatile、ThreadLocal等,有助于在...
面试题可能涉及线程安全、死锁、活锁、死锁预防、线程池参数调整等。 5. **SpringCloud面试题**:Spring Cloud为微服务提供了一整套解决方案,面试可能涉及Eureka服务发现、Zuul和Gateway网关、Ribbon客户端负载...
线程并发库和线程池的作用?.mp4 │ Java面试题15.设计模式和常用的设计模式.mp4 │ Java面试题16.http get post请求的区别.mp4 │ Java面试题17.说说你对Servlet的理解.mp4 │ Java面试题18.Servlet的生命周期.mp4 ...
1.线程、多线程和线程池面试专题 2.BAT Android面试20题详解 3.设计模式面试专题及答案 4.2019Android面试 常见58题 5.初级面试专题(中小厂) 7.设计模式面试专题 8.数据结构面试专题 9.多线程面试专题及答案 10....
面试中会关注线程池的工作原理、线程池的参数设置(corePoolSize、maximumPoolSize、keepAliveTime等)、线程池的关闭策略等。 8. **HashMap原理**:HashMap是Java集合框架中的重要成员,它的实现基于哈希表。面试...
线程、多线程和线程池面试专题.docx 网络编程面试专题.docx 腾讯Android社招面试源码相关11题+原理详解.docx 设计模式面试专题.docx 设计模式面试专题及答案.pdf 面试必备之乐观锁与悲观锁.pdf 高级面试题.docx
### 15个顶级Java多线程面试题答案解析 #### 1. 如何保证线程执行顺序(T1→T2→T3) 在Java多线程编程中,有时我们需要控制线程的执行顺序。例如,有T1、T2、T3三个线程,我们希望T2在T1执行完毕后再执行,T3则需...
线程、多线程和线程池面试专题 Android面试中常被问基础知识点汇总宝典 初级面试专题(中小厂) 混合跨平台开发面试题 设计模式面试专题及答案 中高级专题(View+Handler+Binder) 底层机制突破 面试必备之乐观锁与...
面试过程中他问了线程池,今天详细讲一讲Java 线程池。 线程池 线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。 start()创建一定数量的线程池,进行...
并发容器和线程池分享给需要的同学
4. **多线程**:Java并发编程是面试的热点,线程的创建方式(Thread类和Runnable接口)、线程同步机制(synchronized、volatile、Lock)、线程池(ExecutorService)等都需要熟悉。 5. **IO与NIO**:文件操作、流的...