java如何创建线程池_java线程池状态

java如何创建线程池_java线程池状态分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、为什么要用线程池?线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java并发编程的艺术》,来说一下使用线程池的好处:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

1、为什么要用线程池?

线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。

这里借用《Java并发编程的艺术》,来说一下使用线程池的好处:

  • 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

2、实现Runnable接口和Callable接口的区别

如果想让线程池执行任务的话需要实现的Runnable接口或Callable接口。Runnable接口或Callable接口实现类都可以被ThreadPoolExecutor或ScheduledThreadPoolExecutor执行。两者的区别在于 Runnable 接口不会返回结果,但是 Callable 接口可以返回结果。

备注:工具类Executors可以实现Runnable对象和Callable对象之间的相互转换。(Executors.callable(Runnable task)或Executors.callable(Runnable task,Object result))。

3、执行execute()方法和submit()方法的区别是什么呢?

1)execute() 方法用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功与否;

2)submit() 方法用于提交需要返回值的任务。线程池会返回一个Future类型的对象,通过这个Future对象可以判断任务是否执行成功,并且可以通过future的get()方法来获取返回值,get()方法会阻塞当前线程直到任务完成,而使用get(long timeout,TimeUnit unit)方法则会阻塞当前线程一段时间后立即返回,这时候有可能任务没有执行完。

4、如何创建线程池
《阿里巴巴Java开发手册》中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

Executors 返回线程池对象的弊端如下:

  • FixedThreadPool 和 SingleThreadExecutor:允许请求的队列长度为 Integer.MAX_VALUE ,可能堆积大量的请求,从而导致OOM。
  • CachedThreadPool 和 ScheduledThreadPool:允许创建的线程数量为 Integer.MAX_VALUE ,可能会创建大量线程,从而导致OOM。

方式一:通过构造方法实现。

java如何创建线程池_java线程池状态

方式二:通过Executor框架的工具类Executors来实现,我们可以创建三种类型的ThreadPoolExecutor。

  • FixedThreadPool:该方法返回一个固定线程数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。
  • SingleThreadExecutor:方法返回一个只有一个线程的线程池。若多余一个任务被提交到该线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务。
  • CachedThreadPool:该方法返回一个可根据实际情况调整线程数量的线程池。线程池的线程数量不确定,但若有空闲线程可以复用,则会优先使用可复用的线程。若所有线程均在工作,又有新的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池进行复用。

对应Executors工具类中的方法如图所示:

java如何创建线程池_java线程池状态

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188078.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓取消home键(7P)

    在androidP版本上想要屏蔽某一个应用界面的HOME键和RCENT键需要怎么做(1)其实也不用多复杂,应用首先在清单文件中获得STATUS_BAR权限<uses-permissionandroid:name=”android.permission.STATUS_BAR”/>(2)然后我们需要在该Activity的oncreat方法中去屏蔽,记住,一定要在setCon…

    2022年4月10日
    162
  • 汉字转16进制java_java实现汉字转unicode与汉字转16进制实例[通俗易懂]

    汉字转16进制java_java实现汉字转unicode与汉字转16进制实例[通俗易懂]本文实例讲述了java实现汉字转unicode与汉字转16进制的实现方法。分享给大家供大家参考。具体实现方法如下:一、汉字转unicodepublicstaticStringtoUnicode(Strings){Stringas[]=newString[s.length()];Strings1=””;for(inti=0;i<s.length();i++…

    2025年6月13日
    4
  • 国际企业邮箱优势有哪些?国际邮箱申请方法教学「建议收藏」

    国际企业邮箱优势有哪些?国际邮箱申请方法教学「建议收藏」相信很多小伙伴都用过邮箱,但是大家只会用邮箱收发邮件,处理工作的事务,事实上并不了解邮箱。企业邮箱的优势都有哪些,如何更好地使用邮箱呢?那么下面,小编就以TOM企业邮箱为例,为大家详细讲解邮箱的优势吧!国际企业邮箱优势市场上主流邮箱产品有普通、VIP和企业邮箱三种,针对于国际业务邮件,其中以企业邮箱为首的服务最为全面,其次是VIP邮箱。优势一:海外通道企业邮箱最大优势在于,可以和国外邮箱进行信件往来,原因来自于企业邮箱设有独立的海外通道,将国内和国外的邮箱通道很好的进行连通,有效保障收件收发稳定。

    2025年11月24日
    6
  • 解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.

    解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.应用朴素贝叶斯分类器时候,发现报错无法解析名称NaiveBayes.fit这是因为你想用NaiveBayes。适用于MATLABR2018b。根据NaiveBayes的R2014b发布说明,fit被fitNaiveBayes取代:同时根据R2018a发布说明fitNaiveBayes被fitcnb取代。因此,使用fitcnb即可。将NaiveBayes.fit改为fitcnb就好啦!!!参考链接:链接:点击这里.打个小广告啊啊啊打个小广告,欢迎关注我的公众号“麦香E站”,分

    2025年5月27日
    2
  • 交换机,集线器,路由器这三者如何区分,各自的作用是什么?

    交换机,集线器,路由器这三者如何区分,各自的作用是什么?

    2022年2月7日
    73
  • Js保留两位小数_如何保留两位小数

    Js保留两位小数_如何保留两位小数一、“四舍五入”算法  1.四舍五入的情况varnum=4.2167456;num=num.toFixed(2);//输出结果为4.22varnum=4.2167456;num=Math.round(num*100)/100;//输出结果为4.22varnum=4.2007456;num=Math.round(num*…

    2022年8月10日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号