Executors工具类的相关方法
创始人
2024-01-21 01:15:03
0

前言:大家好,我是小威,24届毕业生。本篇将记录创建线程池的Executors工具类里面的方法,方便加深知识印象和复习使用。
本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬🤩🤩。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

🎁如果大佬在准备面试,可以使用我找实习前用的刷题神器哦刷题神器点这里哟
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

文章目录

  • 🎈通过Executors类创建线程池
  • 🎆newCachedThreadPool方法
  • 🎊newFixThreadPool方法
  • 🎍newScheduledThreadPool方法
  • 🎠newSingleThreadExecutor方法
  • 🎡newSingleThreadScheduledExecutor方法
  • 🎁newWorkStealingPool方法

🎈通过Executors类创建线程池

线程池的创建方式有很多种,可以通过Executors工具类创建多种模式的线程池,Executors工具类位于java.util.concurrent.locks包中,接下来解释其中的方法。

首先将线程池的七个参数标在这里:
corePoolSize:表示线程池中核心线程的数量;

maximumPoolSize:表示线程池中最大线程数量;

keepAliveTime:针对救急线程的存活时间的变量,就是当线程数量超过线程池中的核心数量时,如果没有新的任务被提交,那么核心线程外的救急线程就会保持在keepAliveTime变量值之后被销毁,而不是立即销毁;

unit:也是针对救急线程,表示keepAliveTime的核心单位;

workQueue:表示线程池中的阻塞队列,阻塞队列中存储着等待执行的任务;

threadFactory:表示用来创建线程的线程工厂。创建线程池的时候,默认的线程工厂创建的线程具有相同的优先级,可以为线程起一个好名字;

handler:表示线程池的拒绝策略。当线程池中的阻塞队列满了的时候,线程数maximumPoolSize也达到了最大值,如果此时再有任务提交到线程池,线程池就会采取策略来拒绝任务的执行。

在这里插入图片描述

🎆newCachedThreadPool方法

调用Executors工具类的newCachedThreadPool方法可以创建一个可缓存的线程池,核心线程数为0,当线程池中的线程数量超过了运行任务所需要的线程数,那么可以回收空闲的线程,默认每60s回收;同时当任务增加的时候,线程池又可以创建新的线程来处理任务。

    public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue());}public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue(),threadFactory);}

🎊newFixThreadPool方法

调用Executors工具类的newFixThreadPool方法可以创建一个固定长度大小的线程池,线程池中的线程都是核心线程,也就是创建的线程池中的线程数量是固定的,能够控制线程池的最大并发数。当向线程池提交任务时,如果线程池中有空闲的线程则会直接执行任务,如果没有空闲线程则会将任务放入阻塞队列中等待,有空闲线程的时候再去执行阻塞队列中的线程。当线程池达到最大线程数时,线程数量会保持不变,一旦某个线程出现异常,线程池会补充一个线程。提交到线程池的任务过多可能会导致内存溢出。

    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),threadFactory);}

🎍newScheduledThreadPool方法

调用Executors工具类的newScheduledThreadPool方法可以创建一个可以周期性执行任务的线程池,也能够定时执行任务。

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {return new ScheduledThreadPoolExecutor(corePoolSize);}public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) {return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);}

🎠newSingleThreadExecutor方法

调用Executors工具类的newSingleThreadExecutor方法可以创建只有一个工作线程的线程池,相当于只有一个线程在工作。能够保证任务按照先进先出的顺序,或者优先级顺序执行任务。就像单线程在串行执行任务一样,但是也有些区别,如果这个唯一的线程出现了异常,线程池会创建一个新的线程来代替它。

   public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),threadFactory));}

🎡newSingleThreadScheduledExecutor方法

调用Executors工具类的newSingleThreadScheduledExecutor方法可以创建只有一个工作线程,并且支持定时,周期性执行任务的线程池。

    public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {return new DelegatedScheduledExecutorService(new ScheduledThreadPoolExecutor(1, threadFactory));}

🎁newWorkStealingPool方法

调用Executors工具类的newSingleThreadExecutor方法可以创建一个具有并行级别的线程池,这是jdk 1.8新增的方法,可以为线程池设置并行级别,通过使用多个队列来减少竞争,需要传递一个并行级别的参数。

    public static ExecutorService newWorkStealingPool(int parallelism) {return new ForkJoinPool(parallelism,ForkJoinPool.defaultForkJoinWorkerThreadFactory,null, true);}

本篇文章就分享到这里了,后续将会分享各种其他关于线程池的知识,感谢大佬认真读完支持咯 ~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...