范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java开发之高并发必备篇(七)线程池

  线程池的使用
  我们之前使用线程的时候都是自己手动的通过new Thread等方式创建的,使用完了销毁线程,在开发中这样的操作会造成一些弊端:
  对线程频繁的创建和销毁会消耗系统资源
  当有空闲线程的时候无法复用它,需要创建新的线程这样响应速慢,效率低下
  并发线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或OOM(OutOfMemoryError内存溢出)
  缺乏更多功能支持,如延时执行、定期执行等
  怎么解决上面的一些问题呢?没错就是使用池化技术了。
  · 线程池介绍
  线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池可以让我们重用已经存在的线程,降低线程创建和销毁的消耗,提高系统的响应速度,并且线程池可以对线程进行管控,不同类型的线程池还会提供不同的功能,例如:有的可以提供延时或者定时执行任务。
  · 线程池核心参数
  corePoolSize: 核心池的大小,这个参数跟下面讲述的线程池的实现原理有很大的关系。默认情况下,在创建了线程池后,线程池中的线程数为0(除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,表示在没有任务的时候预先创建好corePoolSize个线程或者一个线程),当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列workQueue当中;
  workQueue: 一个阻塞任务队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,它有三个队列选择:
  ArrayBlockintQueue:有数量限制的队列
  LinkedBlockingQueue:没有数量限制的队列
  SynchronousQueue:队列不用于存储数据,数量为0,用于数据的移交,队列中插入和删除操作都是同步执行的。
  maximumPoolSize: 线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;
  keepAliveTime: 表示线程没有任务执行时最多保持多久时间会终止。
  handler:  表示当拒绝处理任务时的策略,有以下四种取值:
  ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
  ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)。
  ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务。
  · 线程池原理图解
  · Java对线程池的支持
  在JDK中有个Executors类提供了四个静态的方法:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor可以让我们获取四种不同类型的线程池。这个四个方法都返回一个ExecutorService及其子接口的实现类,这些接口中定义了线程池操作的一些基本操作。下面我们来认识下这四个线程池:
  1.newCachedThreadPool
  创建一个数量无限制的可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。比较适合一些执行任务时间端的线程使用场景。
  2.newFixedThreadPool
  创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。定长线程池的大小最好根据系统资源需要进行设置。例如:对于IO密集型的任务一般设置为Runtime.getRuntime().availableProcessors()*2即可利用进程数量的2倍等;
  它比较适合一些执行任务时间长消耗资源大的情况,这样把线程数量控制好不会给系统造成太大的负担。
  3.newScheduledThreadPool
  创建一个指定大小的线程池,支持延时和周期性任务执行。所以它的应用场景不言而喻了,例如:定时备份、定时检测等;
  4.newSingleThreadExecutor
  创建一个有顺序的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行(有FIFO先进先出, LIFO后进先出, 优先级)。
  · 线程池常用操作方法
  submit(): 表示提交执行一个线程任务,支持Runnable和Callable两种方式,并返回一个代表任务待处理结果的Future对象。
  execute():提交执行一个Runnable任务,获取不到任务执行的结果。
  shutdown():启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务。如果已经关闭,调用没有额外的作用。
  shutdownNow():尝试停止所有主动执行的任务,停止等待任务的处理,并返回正在等待执行的任务列表。此方法不等待主动执行的任务终止。
  isShutdown():判断线程池是否已经停止。
  · 线程池的使用
  1.newCachedThreadPool
  运行结果:
  2.newFixedThreadPool
  运行结果:
  3.newSingleThreadExecutor
  运行结果:
  4.newScheduledThreadPool
  运行结果:
  当我们调用shutdown和shutdownNow的时候查看下任务执行情况:
  executorService.shutdown()
  我们发现shutdown是等待任务执行完之后才结束线程池。
  executorService.shutdownNow();
  我们发现延迟任务都没有执行到就结束了线程池,所以shutdownNow是不管任务是否执行完都会结束线程池。
  总结:在真实开发中我们需要按照我们的业务需要选择合适的线程池,如果要执行时间短但是任务比较多那么就选择newCachedThreadPool数量不限制的可缓存线程池,如果我们执行任务时间长消耗资源那么我们需要选择newFixedThreadPool这种固定长度的线程池合理控制资源消耗,如果我们执行的任务需要按照顺序执行那么我们需要使用newSingleThreadExecutor,如果我们有延时执行的任务或者周期性执行的任务那么我们需要选择newScheduledThreadPool。

把冷饮店搬回家?九阳随身果汁机体验,轻松实现冰饮冰淇淋自由在这个炎热的季节,最爽的莫过于喝冰饮吃冰淇淋。冷饮店里的冰饮冰淇淋几乎都是固定款式,且分量少价格高还不卫生。为了在家里吃上冰淇淋,我入手了九阳随身果汁机L3LJ580,它是冰淇淋机自由市场两大老将成遗珠,昔日攻防超巨仍有望成争冠拼图随着休赛期的深入,NBA各支球队基本都完成了阵容调整和补强,今夏并没有太多大牌球星的交易或转会让球迷们感到震惊和期待,但自由市场上仍有部分尚未被签约的球员去向却令人十分关注,其中最人生的坎坷相伴人生的坎坷是命中注定吗?所有一切缘分,都是天意安排,人是不奈命何的?圣人伟人也不例外!走顺风的时候天地皆同力,好像自己无所不能,以为可以与天地斗,实则上谁也斗不过天,天助你才会顺风鞋子心意还记得去年春季,正值该换掉长靴短靴穿上单鞋的时候,及时收到了老公给我买的两双单鞋,一黑一白,真皮,穿上合脚舒适。更因为是老公买的,穿上有一种潜在的幸福感。此后这两双鞋便成了我春夏秋何赛飞优雅老去太美了,纱裙混搭唐装外套,穿出60后女人的高级感优雅的女人,到老也会美得非常动人,在她们身上有着独一无二的魅力,那就是刻在骨子里的自信。自信不仅仅是流露在外表的意气风发,更是你的经历认知和思想,对于上了年纪的女人来说,能够坦然面如何将碎花裙穿出人人都夸赞得美?很简单,几个技巧满足你的心愿追求清新与甜美是当下不少时尚博主们甚至是女明星们都经常会做的事情,但你知道吗?其实想要实现自己的小愿望真的特别简单,根本不需要去纠结或者困扰,只需要给自己挑选一条十分适合自己的碎花害怕纹眉被套路?姐妹们一定要谨慎,看完这五点再去纹眉一纹眉为什么会发红?在技术和安全植物色乳的双重保障下,眉毛发红只可能是两个原因,一个是操作的时候选了棕色,棕色色乳里包含红色,皮肤对于红色色素代谢的时间比较慢,后期就容易显得发红。云镜皮肤检测仪美容院诊断皮肤十大问题的神器皮肤检测仪是为肌肤美容保养护理提供量化依据的测量仪器。它配上专业检测软件可以帮助消费者直观快速了解自己皮肤的健康状况。一般情况下人眼只能看到皮肤表面比较明显的状况,看不到皮肤深层的34条极简生活建议,简单又自在养成一些健康的购物理念,适当地清理生活空间,减少情绪上的内耗。让生活更极简,更自在。物质极简,轻装上阵。1相似款的物品可以不买。不重复去买东西,减少购买,从根本上少给自己找烦恼。2Buccellati布契拉提DansduFau红碧玺手镯主石为一颗18。52ct枕形切割红碧玺,镶嵌150颗总重0。99ct帕拉伊巴碧玺,点缀10颗0。86ct水滴形切割钻石,以及198颗总重2。8ct圆形明亮式切割钻石。意大利珠宝商BCBA吉林大名单基本确定,混血天才与强力内线值得期待,目标8强距离8月31日CBA本土球员注册截止时间还有一个星期,最近几天20支球队都在有条不紊的进行注册,按CBA规则每支球队本土球员注册不得少于16人,但最多不能超过20人,在国家队效力以
无缘签约,再见湖人!无望落叶归根,佩总一根筋,詹姆斯帮不了你早些时候,NBA记者沙姆斯报道了一些有关于新赛季重要赛程的消息,其中作为卫冕冠军,勇士将在揭幕战中主场面对湖人,同样是湖人对勇士,只不过这一次揭幕战有所不同的是主场从湖人主场换成了中超奇景四支升班马位列前八,保级成功广州城锁定降级名额中超奇景四支升班马位列前八,基本保级成功广州城锁定降级名额。四支升班马位列前八,基本保级成功。春雨康哥原创作品,侵权必究。中超第12轮因为疫情原因,先赛六场,其余延期待定。但是中超小二,来两斤牛肉,打一壶花刀带你进入快意恩仇的武侠世界哈喽啊大家好最近带大家盘点了财阀的二三事。不少看官戏称想当财阀,感受财阀的快乐。可依我看,财阀如何也比不上古代剑客侠士的逍遥人生。给大家推荐几个还原武侠世界的游戏,进入游戏感受自由达里厄斯加兰续约,克利夫兰未来已来?Hi掌握篮板球,掌握命运。在上月,克利夫兰骑士官方宣布,球队和后卫达里厄斯加兰达成一份五年1。93亿的新秀指定顶薪合同,再加上其中的奖励升级条款,合同年份中的最高总额能够达到2。3一场15揪出国安最大罪人!33岁国脚中卫4次被打爆,心态彻底崩了中超第12轮,33岁国脚中卫于洋灾难性的表现,被马尔康4次打爆,最终北京国安被武汉三镇打出了51的惨案。于洋不是无名之辈,他是一位很有经验的国脚中卫,他一共为国足出场过14次。不过9换1血亏交易灰熊豪赌杜兰特组三巨头!篮网拿回4球员5首轮杜兰特在本周已经向篮网老板蔡崇信下了最后通牒,要求管理层要么炒掉纳什和马克斯,要么尽快交易自己,并且KD还自己指定了下家,想要加盟凯尔特人和76人。但不管是绿军还是76人,都无法拿让出顶薪名额,易建联签老将合同,16年生涯,他赚到多少薪水?在休赛期到来的时候,没有球迷会想到休赛期的广东男篮的变动会如此之大,那时候大家都知道朱芳雨在休赛期肯定是要忙碌的,因为易建联周鹏赵睿等人的合约都已经到期了。周鹏加盟深圳男篮?赵睿想酷暑伏天以热制热养生时养生小锦囊健康过夏日绿树浓阴夏日长,楼台倒影入池塘。荷花繁盛,金蝉争鸣伏天已至,盛夏正浓中国人有言道热在三伏所谓伏天,三伏之日也是初伏中伏和末伏的统称,亦是一年中最热的时段尽管伏天高温不断热浪袭人但同买菜的时候要注意,4种蔬菜不要再买了,小心给身体健康带来威胁现在人们的生活水平越来越好了,买菜不再为了省钱而不买,基本上想吃什么菜就会买什么菜,这也导致现在很多人的饮食是不健康的。出门买菜如果遇到了以下这4种蔬菜千万不要买,如果你不知道是哪振德医疗医疗健康双轮驱动,产品渠道促进持续性增长(报告出品方分析师德邦证券陈铁林王绍玲)1。振德医疗医疗健康双轮驱动的耗材企业1。1。公司处于新阶段,拥抱未来振德医疗成立于1994年,于2018年在A股主板上市,是中国领先的医疗领武学校一定记得收藏你不知道的健康小知识人到中年不得已,保温杯里泡枸杞随着生活节奏的加快,生活压力倍增,生活习惯不规律,也将90后推向养生大潮。那为了健康养生你有哪些行动,做的是否都正确呢!下面小领就告诉大家几个健康养生