纠纷奇闻作文社交美文家庭
聚热点
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Java线程池是什么?模拟一个简单的Java线程池

6月10日 终离去投稿
  一、前言
  为了实现并发编程,于是就引入了进程这个概念。进程就相当于操作系统的一个任务。多个进程同时执行任务,就实现了并发编程,能够更快的执行。
  但是由于进程还不够轻量,创建一个进程,销毁一个进程消耗的资源不可忽视。如果进程数量不多的情况下,这些资源消耗是可以接受的,但是如果频繁的创建、销毁进程。就是一笔很大的开销了。
  那要怎么办呢?
  为了解决这个问题,人们引入了更轻量的工具线程。
  线程也被称为轻量级进程。它的创建、销毁比进程消耗的资源更少。但是如果任务数量很多,多线程也顶不住频繁的创建、销毁了呢?这时线程池就出来解决问题了!二、线程池是什么?
  线程池是类似于Java字符串常量池一样的东西。
  使用线程VS不使用线程当使用一个线程的时候,就直接从池子里取一个线程过来。当不用一个线程的时候就把这个线程放到池子里,这样可能大家还不是很明白到底线程池是啥。在给大家举一个更形象的例子。找工作!
  大家都知道找工作的流程大概是这样的。投简历笔试面试offer当我们到面试完了之后,会有两种情况。通过了,公司打电话通知你,给你发offer没通过,而且一般公司也不告诉你自己没过,而是完全没通知你没有过,这是因为公司可能会把你放到他们的人才贮备池里了。
  假设公司要找50个人,在秋招的时候,给50个人发了offer。但是实际上,只有35个人来入职报道了。这时候,剩下的15个人就从人才贮备池里直接捞出15个,直接发offer。这时候可能过了一段时间,公司突然打电话通知你,你被录用了,要不要来?这个操作就相当于一个线程要被使用到了,直接从池子里拿出来用。这就是用找工作的例子形容了一下线程池大概是什么意思。三、线程池构造方法ThreadPoolExecutor的构造方法的参数都是啥意思?
  在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。
  ThreadPoolExecutor这个类是Java标准库提供的一组类,用来使用线程池。
  ThreadPoolExecutor的构造方法有四个。分别含有不同的参数,使用的场景也不同。
  我们就以参数最多的构造方法来介绍。
  ThreadPoolExecutorthreadPoolExecutornewThreadPoolExecutor(
  intcorePoolSize,
  intmaximumPoolSize,
  longkeepAliveTime,
  TimeUnitunit,
  BlockingQueueworkQueue,
  ThreadFactorythreadFactory,
  RejectedExecutionHandlerhandler
  )
  1。corePoolSize核心线程数
  2。maximumPoolSize最大线程数
  对于核心线程数和最大线程数可能不是很理解到底是干嘛的,这里举一个员工上班的例子。
  核心线程数,就是公司里的正式员工,允许他们可以摸鱼一会。被发现了不至于开除。(相当于线程池中的线程就算什么也不干也不会被销毁)
  最大线程数,就是公司里的正式员工临时工组成的数量,但是这里的临时工摸鱼到了一定时间了就要被开除。(相当于线程池中的线程被销毁)
  3。keepAliveTime描述临时工能摸鱼多长时间的
  4。unit是一个时间单位,也就是keepAliveTime的单位。
  5。workQueue阻塞队列,就组织了线程池要执行的任务
  6。threadFactory线程的创建方式,通过这个参数来设定不同线程的创建方式
  7。RejectedExecutionHandlerhandler拒绝策略。当任务队列满了的时候,新任务又来了,这时候咋办?
  (1):最新的任务不要了
  (2):最老的任务不要了
  (3):阻塞等待
  (4)开摆:抛出异常
  由于ThreadPoolExecutor使用起来比较复杂,最多有7个参数。标准库为此又为程序员们提供了一组其他的类。相当于对ThreadPoolExecutor又进行了一层封装。
  newFixedThreadPool:创建出一个固定线程数量的线程池。
  ExecutorServiceService1Executors。newFixedThreadPool(20);
  newCachedThreadPool:创建出一个数量可变的线程池
  ExecutorServiceService2Executors。newCachedThreadPool();
  newSingleThreadExecutor:创建只有一个线程的线程池
  ExecutorServiceService3Executors。newSingleThreadExecutor();
  newScheduledThreadPool:创建一个能设定延时时间的线程池。
  ExecutorServiceService4Executors。newScheduledThreadPool(20);四、模拟实现一个线程池
  模拟实现一个线程池的核心操作:
  。:将任务加到线程池中submit。
  。:使用Worker类描述一个工作线程,Runnable来描述一个任务。
  。:创建一个BlockingQueue阻塞队列组织所有任务。
  。:每个Worker要做的事情就是不停的从阻塞队列里获取任务并执行。
  。:指定线程池中的线程最大数目,如果超过这个数目就不要再继续创建线程了。
  代码实现:
  我们创建一个线程池并让它不停的创建进程打印hello
  importjava。io。IOE
  importjava。util。ArrayL
  importjava。util。L
  importjava。util。concurrent。BlockingQ
  importjava。util。concurrent。LinkedBlockingQ
  importjava。util。concurrent。ThreadPoolE
  CreatedwithIntelliJIDEA。
  Description:模拟实现线程池的使用
  publicclassThreadDemo03272{
  publicstaticvoidmain(String〔〕args)throwsIOException,InterruptedException{
  ThreadPollthreadPollnewThreadPoll();
  for(inti0;i10;i){
  threadPoll。submit(newRunnable(){
  Override
  publicvoidrun(){
  System。out。println(hello);
  }
  });
  }
  }
  }
  classWorkerextendsThread{
  publicBlockingQ
  publicWorker(BlockingQueuequeue){
  this。
  }
  Override
  publicvoidrun(){
  工作线程的具体逻辑
  需要从阻塞队列中取任务。
  while(true){
  try{
  Runnablecommandqueue。take();
  通过run来执行具体任务
  command。run();
  }catch(InterruptedExceptione){
  e。printStackTrace();
  }
  }
  }
  }
  classThreadPoll{
  包含一个阻塞队列,用来组织任务
  publicBlockingQueuequeuenewLinkedBlockingQueue();
  这个list就用来存放当前的工作线程。
  publicListworksnewArrayList();
  publicintMAXWORKERCOUNT10;
  通过这个方法,把任务加入到线程池中
  submit不光可以把任务放到阻塞队列中,也可以负责创建线程
  publicvoidsubmit(Runnablecommand)throwsIOException,InterruptedException{
  if(works。size()MAXWORKERCOUNT){
  如果当前工作线程的数量不足线程数目上线,就创建出新的线程
  工作线程就专门找一个类完成
  worker内部要哦能够取到队列的内容,就要把这个队列实例通过worker的构造方法传过去
  WorkerworkernewWorker(queue);
  worker。start();
  works。add(worker);
  }
  queue。put(command);
  }
  }
  运行效果:
  可以看到,打印了10个hello。
投诉 评论 转载

好日子到头,苹果开始禁止普通用户下单教育优惠产品苹果教育优惠改版苹果近日对教育优惠进行了改版,在之前在苹果官网使用教育优惠购买产品的时候,可以先购买,再随机抽查教育资格,这让不少不符合资格的用户也能蒙混过关。并且……Java线程池是什么?模拟一个简单的Java线程池一、前言为了实现并发编程,于是就引入了进程这个概念。进程就相当于操作系统的一个任务。多个进程同时执行任务,就实现了并发编程,能够更快的执行。但是由于进程还不够轻量,……打错数字,比斯利发推世界上77亿人,有75亿防不住我自由球员迈克尔比斯利近日发推,表达了自己想要重回NBA的愿望。地球上有7753000000个人,其中7529999999个都防不住我。算了,甚至我自己都防不住我自己……OLED面板行业研究报告OLED迎来发展良机,供应链国产化率(报告出品方作者:国元证券,张世杰)1。OLED率先在中小尺寸渗透率持续提升,国内有望占据主导地位1。1OLED行业蒸蒸日上,率先在中小尺寸领域得到广泛应用OLED……51岁跳水皇后接地气!打扮朴素亲自下田割菜,素颜出镜似冻龄饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!12月25日,奥运冠军高敏在社交平台上晒出一段视频,曝光了自己的近况,引发网友热议。画面中,51岁的高敏……我们在收费站一天一夜了,外面正下雪,自驾游新疆的杭州人求助10月6日上午,曹先生致电新闻热线称:我们是杭州人,现在卡在伊犁哈萨克自治州霍城县惠远东收费站。以下为求助信息:10月1号晚,我和朋友们一起飞往乌鲁木齐,中午到的,……Z世代国潮下沉市场一文get时奢行业新风尚一年几次提价,早已成为奢侈品的常态,而且每到大牌调价之时,少不了的便是专卖店门口大排长龙。但2022年有所不同,一边是涨涨涨的奢侈品,另一边却是中国奢侈市场首次负增长的现状。奢……才知道!手机也能连网线上网!玩游戏看电视网络又快又稳随着4G和5G的普及,以及各种短视频平台的出现,月底流量不够用成了常态,家里虽有wifi,可难免出现wifi卡得根本用不了的时候,有时甚至连不上,不管是网卡还是没网,都不要太煎……从火遍全球,到韩国之耻,鸟叔的消亡史,他到底走错了哪一步一首《江南style》传遍了大街小巷,骑马舞的动作被人争相模仿的鸟叔凉凉了,他被韩国电视台给封杀了。想当年,就这样一个其貌不扬的肥宅富三代,不仅包揽了世界各国排行榜的第一,连小……2023年销量目标4。5万辆,智己汽车规划多款新车,能否扭转随着新能源车市的持续火热,在刚刚过去的2022年不少造车新势力获得了不错的销量成绩,甚至实现了销量翻番的表现。但是不可忽视的是,新能源市场的竞争也在逐渐加剧,不少造车新势力也遭……RENOGY如果新能源荣登2022投资界碳中和VENTURE近日,由清科创业、投资界发起的2022Venture50榜单正式公布,RENOGY如果新能源入围2022投资界碳中和VENTURE50榜单。关于VENTURE50V……如何准备待产包?今天一早,嫂子就发来信息,问我有没有待产包可推荐。母婴行业摸滚几年,今天就浅谈下待产包如何准备。待产包,顾名思义,就是生产前要准备好的产妇及婴儿用品。一般,从7个月就要开……
Three计划向所有爱尔兰客户免费提供5G服务全战开发商CA招聘暗示新作唐风解密游戏归梦免费推出幽门螺杆菌感染的治疗新版指南更新11条指导建议指南共识跳水世界杯再登顶王宗源接近心中最好的答案长期心情压抑的危害有哪些呢?早谢可以分为哪几种?腰椎间盘突出症,可以通过正骨按摩,把突出的髓核给按回去吗?人的寿命极限是多少岁?苹果手机为何没有反向充电,原因在这中兴新机官方预热5月9日见,全新屏下摄像头肌酐超过150,肾友夏天需警惕1件事,以免肾缺血加速肾衰竭哪些癌症是已发现且好治疗的?
全国唯一的一篇满分作文题目叫做酒,但是整篇文章却没有一个酒字浪漫情话短语大全唯美的古风句子人体有这八大养生部位你知道几个送李山甫赴熙州应采儿评价王子文和吴永恩恋情别人谈恋爱是热恋,她是热搜城市工蚁阿强韩国人为什么恨中国?只因在自卑的路上越走越远逢字开头的成语关于逢字开头的成语朝鲜女人只穿裙子吗?她们也喜欢穿紧身裤春节烫发发型MM是怎样折磨交警的

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形