面试官了解线程池吗?
为什么有线程池?
java语言里,针对每个请求都创建一个线程,会有很大开销。计算机在创建和销毁线程都需要花费额外的时间,甚至多于处理用户请求的时间。创建过多线程还会导致线程切换以及消耗内存导致资源不足。所以需要一个东西来管理线程,充分利用资源。-- 线程池线程池作用降低资源消耗。重复利用已创建的线程,降低创建和销毁线程的开销 提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立刻执行 提高线程的可管理性。使用线程池可以对线程进行统一的分配、调优和监控 java线程池分类newCachedThreadPool
作用:创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。
创建方式: Executors.newCachedThreadPool() newFixedThreadPool
作用:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。
创建方式: Executors.newFixedThreadPool(int nThreads) newSingleThreadExecutor
作用:创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。
创建方式: Executors.newSingleThreadExecutor() newScheduleThreadPool
作用: 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
创建方式: Executors.newScheduledThreadPool(int corePoolSize) newSingleThreadScheduledExecutor
作用: 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。
创建方式: Executors.newSingleThreadScheduledExecutor() 核心参数corePoolSize:线程池中的常驻核心线程数 maximumPoolSize:线程池中能够容纳同时执行的最大线程数,必须大于1 keepAliveTime:多余的空闲线程的存活时间;当前池中线程数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁 unit:keepAliveTime的单位 workQueue:任务队列,被提交但尚未执行的任务 threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程,一般默认 handler:拒绝策略,表示当队列满了,并且工作线程大于等于线程池的最大线程数时如何来拒绝请求执行的runnable的策略
流程图工作中优雅使用
如果是基于spring开发,那么可以使用spring提供的线程池包装类。ThreadPoolTaskExecutor @Bean("testExecutorPool") public Executor taskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); // 核心池大小 taskExecutor.setCorePoolSize(5); // 最大线程数 taskExecutor.setMaxPoolSize(10); // 队列程度 taskExecutor.setQueueCapacity(100); // 线程空闲时间 taskExecutor.setKeepAliveSeconds(60); // 线程前缀名称 taskExecutor.setThreadNamePrefix("testExecutor--"); // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 taskExecutor.setAwaitTerminationSeconds(60); // 线程不够用时由调用的线程处理该任务 taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return taskExecutor; }@Scheduled@Async @Scheduled(fixedRate = 500L) public void scheduledTest() { UUID id = UUID.randomUUID(); log.warn("Thread id: {}", id); }
阿吉兰兄弟控股集团与顺丰国际合资的物流服务公司正式投入运营南方财经2月17日电,21世纪经济报道记者从阿吉兰兄弟控股集团获悉,今年1月份,该集团与顺丰国际合资的AJEX埃捷国际物流(下称AJEX)已经正式投入运营。据悉,AJEX目前的运营
移动固态硬盘,一些大品牌都是在割韭菜收智商税,应该如何选择?随着对数据传输和读取速度要求的不断提高,现在很多小伙伴都选择固态移动硬盘来存储和传输数据,这么做到底有什么好处,又有哪些弊端呢?首先,移动固态硬盘比机械硬盘更加小巧便携,体积非常小
目前,买电脑哪个品牌好?苹果,thinkpad,外星人,任意品牌,根据使用途径不同推荐也不同您好,很高兴回答问题。联想小新故宫联名款,很漂亮吧关于目前买电脑哪个品牌好的问题,回答是没有哪个电脑品牌说是最好
家里要换全套家电,有没有一整套的家电推荐?厨电非常推荐使用集成灶。很多人都觉得集成灶的价格高不划算,其实不然,算了一笔账,如果这些电器单独购买,总价值甚至高于集成灶。而且我们从厨房装修的角度来看,在装修过程中,我们需要购买
中国动漫的前景如何?中国动漫在最近几年的发展大家有目共睹,优秀的动漫作品出现了很多,受到很多国人的追捧,动漫适应的人群也越来越广,让很多人不再认为动漫是小孩子看的东西,扩大了动漫市场。中国动漫的迅速发
有哪些游戏本可以流畅运行绝地求生?在回答之前郑重声明一点,目前绝地求生已经处于正式版本阶段,从前优化不堪的丑闻算是一笔勾销了,经历了大致8个月优先体验测试,终于在正式版本看到了雨后春笋的面目,性能优化是一大方面,另
游戏笔记本电脑性价比较高的有什么?想要推荐性价比高的游戏本?这问到我饭碗里了,老司机开车啦!接下来为大家盘点高性价比I7游戏本,拒绝游戏卡顿,从我做起。先来和大家科普下i7是什么,对于游戏本来说,一块好的核心是很重
网站建设有必要使用独立服务器吗?在初建站时期,建议大家尽量使用性价比较高的虚拟空间,降低网站的成本。但是网站发展到一定的程度,比如虚拟空间已经不能承受太高的访问量,或需要自己设置服务器以便开发新功能时,站长们就可
heic格式照片怎么才能打开?是什么原理?要想知道如何打开heic格式的图片,首先你要知道这个是什么东西。heic格式的图片IOS11更新后在拍摄照片时默认的图片储存文件,相比JPG,这个格式占用的打内存更小,但是画质更强
22GB640GB,高管自爆拯救者Y90发布日期骁龙8加持元宵节已经过去,手机厂商们也正式开足了马力,在接下来的一段时间,我们将再次迎来骁龙8旗舰的井喷期。在RedmiK50电竞版和红魔7系列即将发布之际,预热已久的的拯救者Y90也在今天
即将发布的四款手机,每一款都是开年大作,亮点满满非常吸睛元宵节之后,又有一大波新机即将发布。小编汇总了四款网上热度最高的四款手机,供大家讨论参考。红米K50电竞版本冷血旗舰性能全新骁龙8旗舰处理器,满血版LPDDR5内存升级版UFS3。