您的位置 首页 java

java面试题整理《多线程篇》九

线程池 的原理?
线程池做的工作主要是控制运行的 线程 的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。

重用存在的线程,减少对象创建销毁的开销,且提高了响应速度;有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞,且可以定时定期执行、单线程、并发数控制,配置任务过多任务后的拒绝策略等功能。

线程池类别:

newFixedThreadPool :一个定长线程池,可控制线程最大并发数。
newCachedThreadPool:一个可缓存线程池。
newSingleThreadExecutor:一个单线程化的线程池,用唯一的工作线程来执行任务。
newScheduledThreadPool:一个定长线程池,支持定时/周期性任务执行。
线程池尽量不要使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式去创建,因为Executors创建的线程池底层也是调用 ThreadPoolExecutor,只不过使用不同的参数、队列、拒绝策略等如果使用不当,会造成资源耗尽问题。直接使用ThreadPoolExecutor让使用者更加清楚线程池允许规则,常见参数的使用,避免风险。

主要参数:

corePoolSize:核心线程数,默认情况下创建的线程数,默认情况下核心线程会一直存活,是一个常驻线程。
maximumPoolSize:线程池维护线程的最大数量,超过将被阻塞!(当核心线程满,且阻塞队列也满时,才会判断当前线程数是否小于最大线程数,才决定是否创建新线程)
keepAliveTime:非核心线程的闲置超时时间,超过这个时间就会被回收,直到线程数量等于 corePoolSize。
unit:指定 keepAliveTime 的单位,如 TimeUnit.SECONDS、TimeUnit.MILLISECONDS
workQueue:线程池中的任务队列,常用的是 ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue。
threadFactory:创建新线程时使用的工厂
handler:RejectedExecutionHandler 是一个接口且只有一个方法,线程池中的数量大于 maximumPoolSize,对拒绝任务的处理策略,默认有 4 种策略:AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy

文章来源:智云一二三科技

文章标题:java面试题整理《多线程篇》九

文章地址:https://www.zhihuclub.com/180679.shtml

关于作者: 智云科技

热门文章

网站地图