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

线程池异常你都了解如何处理吗?

  大家在开发的过程中是否发现,我们使用线程池的时候很少去处理运行过程中出现的错误,不处理错误这样没关系吗?不处理会不会导致线程池结束?如果需要处理错误我们应该如何进行处理呢?那么今天从以下几个方面来看一下
  1.线程池异常
  通过代码来演示三种异常线程池的情况。 1.1Runable执行异常(业务异常)
  测试代码: public class ThreadPoolExceptionTest {      public static void main(String[] args) {          ExecutorService executorService = Executors.newFixedThreadPool(2, new ThreadFactory() {             AtomicInteger integer = new AtomicInteger(1);             @Override             public Thread newThread(Runnable r) {                 return new Thread(r, "mxsm-"+integer.getAndIncrement());             }         });         executorService.execute(() -> {             System.out.println(1);             int i = 1/0;             System.out.println(i);         });         executorService.execute(() -> {             for (;;){                 try {                     TimeUnit.SECONDS.sleep(1);                     System.out.println(Thread.currentThread().getName()+" 当前时间:"+System.currentTimeMillis());                 } catch (InterruptedException e) {                     e.printStackTrace();                 }             }         });         System.out.println("主线程执行完成");     } }
  运行程序观察测试结果:
  结论:线程池正常运行,Runable的异常不会导致线程池停止运行,其他的线程正常运行
  Tips: 执行Runable发生错误的线程将会被销毁会重新建一个线程,以保证固定线程池2的数量 1.2 提交任务到任务队列已满异常
  测试代码: public class ThreadPoolExceptionTest {      public static void main(String[] args) {          ExecutorService executorService = new ThreadPoolExecutor(1, 1, 100, TimeUnit.SECONDS,new ArrayBlockingQueue<>(1),new ThreadFactory(){             AtomicInteger integer = new AtomicInteger(1);             @Override             public Thread newThread(Runnable r) {                 return new Thread(r, "mxsm-"+integer.getAndIncrement());             }         });         for(int i = 0; i < 3; ++i){             final int b = i;             executorService.execute(() -> {                 for (;;){                     try {                         TimeUnit.SECONDS.sleep(1);                         System.out.println(Thread.currentThread().getName()+ b +" 当前时间:"+System.currentTimeMillis());                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                 }             });         }         System.out.println("主线程结束");     } }
  运行程序观察测试结果:
  结论:线程池使用默认的拒绝策略的时候,当线程池提交任务到任务队列已满线程池会直接抛出错误,进而影响到主线程的后续的运行如果没有在主线程中进行错误处理(没有打印主线程结束)
  Tips: 提交任务到任务队列已满异常影响的范围和方式由拒绝策略决定 1.3 线程池本身异常
  这里说的线程池本身异常包括但不仅限于在设置线程池大小的时候,可能不停的新建线程导致线程消耗完成了服务器的所有资源
  测试代码: /**  * @author mxsm  * @date 2022/2/1 22:49  * @Since 1.0.0  *  * 设置内存大小  * -Xmx2m  * -Xms2m  *  */ public class ThreadPoolExceptionTest {       public static void main(String[] args) {          ExecutorService executorService = Executors.newCachedThreadPool();         final AtomicInteger integer = new AtomicInteger();         for(int i = 0;i <= 100000; ++i){             final  int b = i;             executorService.submit(new Runnable() {                 @Override                 public void run() {                     try {                         System.out.println(integer.getAndIncrement());                         TimeUnit.SECONDS.sleep(b);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                 }             });         }         System.out.println("主线程结束");     } }
  运行程序观察测试结果:
  结论:线程池导致某些异常会导致线程池直接退出可能同时导致主线程或者主应用发生问题或者退出。
  Tips: 这里演示的众多问题中的一个 2. 异常如何处理
  线程池执行任务主要是通过  ThreadPoolExecutor#runWork  执行的:
  如果任务Runnable执行错误线程池就会往外抛错误退出while循环 处理Worker退出逻辑
  从workers集合中删除执行报错的Worker.
  Tips: 如果你不停的执行Runnable错误的话,线程池的线程标号会越来越大,也就是这里这个原因。
  最终执行当前Runnable线程结束。并不会影响线程池和其他线程。 2.1 Runable执行异常(业务异常)处理方式
  由于Runable执行异常并不会影响到整个系统的运行,不会因为在线程池中执行任务报错导致真系统错误退出。所以线程池执行任务的异常处理方式通常有两种: 直接不处理(也可以打印日志) 捕获异常不让异常往外抛 2.2 提交任务到任务队列已满异常处理
  这个异常取决于使用的何种拒绝策略。Java内置的拒绝策略有四种: CallerRunsPolicy:在任务被拒绝添加后,会调用当前线程池的所在的线程去执行被拒绝的任务 AbortPolicy:直接抛出异常 DiscardPolicy:会让被线程池拒绝的任务直接抛弃,不会抛异常也不会执行。 DiscardOldestPolicy:当任务呗拒绝添加时,会抛弃任务队列中最旧的任务也就是最先加入队列的,再把这个新任务添加进去。 自定义策略,只要实现RejectedExecutionHandler接口
  对于提交任务到任务队列已满异常,如果不进行catch不影响整个整个系统的运行可以不进行处理,如果可能会导致系统中断。就需要对错误进行处理。 2.3 线程池本身导致的异常
  线程池本身导致的异常可能会导致程序的中断,如果程序必须依靠线程池才能完成对应功能,当线程池本身导致异常如上面演示的。那么是否处理异常都无关紧要。整个程序直接崩溃!但是线程池只是一个备选方案,可以将可能的异常进行捕获处理。(但是不能完全杜绝程序崩溃的问题) 3. 从异常看如何使用线程池线程池一定要设置最大线程数,防止不停地创建线程池消耗掉服务器所有的资源 线程池的阻塞队列尽量不要设置为无界队列,原因:同样不停地添加任务可能把服务器的资源消耗完成 对于可预见的异常尽量进行捕获处理
  我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢

伊藤美诚如今颜值大变!新造型曝光变美10个度,新晋日乒最美女神近日,伊藤美诚这位优秀的日本乒乓球运动员得到了很多媒体的关注,她在最近接受了一些采访,热度很高,并且还公布了自己的最新造型,看起来十分的漂亮和可爱。根据日本媒体的评价,伊藤美诚这次63分26板24助攻10断10帽11三分,细数NBA季后赛各项单场数据之最63分26篮板24助攻10抢断10盖帽11三分,盘点季后赛各项数据单场记录,现役仅一人上榜本赛季的NBA常规赛已经开打了将近两个月的时间,三分之一的赛程已经打完,而东西部的格局也逐她身高1米55,却拿18块金牌,25岁读清华,35岁成剑桥博士,凭啥在河南省,有一位世界冠军,总是被刺激别人说她个子矮,不适合打球,她就一路从市队打到省队,再到国家队,最后拿了18块世界金牌别人说运动员四肢发达,头脑简单,她就用11年的时间,去读清汪涵现身农村,突然头发花白满脸沧桑,不免让人猜疑他这是怎么了近日汪涵低调现身农村,但他满头苍白的头发及沧桑的脸加上发白的胡子,立马引起人们关注,纷纷猜测汪涵遇到什么了,一眨眼怎么老了这么多?和之前对比简直换了个人,难道真的是岁月不饶人?要知文代会男明星王凯发际线明显,刘昊然留胡渣,陈晓让人惊讶近日,第十一次全国文代会在京隆重召开,文艺圈不少明星都参加了该盛会,与平时电视上里光鲜亮丽帅气无比的造型不同,这次参加议会男明星几乎个个素颜参加,一个比一个实在,毫无偶像包袱,展现王者荣耀12。21更新新皮肤六折活动开启,妲己全新星元免费兑换王者荣耀正式服将于12月21日上午9点开启不停机更新,本次更新的主要内容有1新皮肤六折活动开启2体验卡兑换商店开启3妲己全新星元免费兑换4部分机型开放高帧模式,等等。具体内容如下1为什么很多人不护肤,反而皮肤很好?最近,很多小伙伴问甄垚为什么很多人不护肤,反而皮肤更好?相信很多小伙伴都曾经有过这样的疑问。其实,皮肤的好坏,和多种因素有关,皮肤护理只是其中的一个因素。归纳起来,皮肤的状态主要和王者荣耀公布镜新皮肤爆料视频双重人格猎手降临CNMO新闻哪个我,才是真的我?代码构筑的人,是否能被定义为人?多年以后,被Z复制人格的猎手,为了守护更多人,挣脱迷惘,从黑暗中向光明奔去。12月20日,王者荣耀放出了镜新皮肤匿光云南的冬天,是心动的感觉来源昆明日报掌上春城提到冬天人们常联想到千里冰封,万里雪飘的画面而云南的冬天却大有不同特殊的地理位置及地形地貌给云南带来了神秘复杂的气候即便同属冬季也是十里不同天包罗着一年四季之景莫兰德加盟让朱荣振更加边缘化CBA第二阶段的比赛在本周末就要在长春开始,各队也在进行最后的补强,辽宁男篮第二阶段为球队内线外援莫兰德报名,并在两场热身赛中上场有着出色的表现,朱荣振这两场比赛因为联赛中热身秀一北京组成双核双塔阵,直言欲取辽篮!CBA第二阶段辽粤吉成受益者鉴于小外援林书豪与吉布森双双到队,常林也已经伤愈复出,北京首钢的阵容已人满为患。因此决定将杨阿力范依铭栾利程等三员小将继续在北京,暂不随队前往长春。首钢现在有了两名不同风格的小外援
折叠屏越来越火,外屏设计日益内卷,绿厂小折叠热卖3个月还香吗相信大家都已经意识到折叠屏手机的火爆,其中主打精致小巧的纵向小折叠也有很大的市场。为此各品牌都先后入局,如今更是有好几个主流手机品牌的小折叠新机即将发布,跟以往相比,大尺寸外屏是这充分发挥大外屏潜力!绿厂小折叠任意窗功能升级,实用性拉满现如今市面上的小折叠手机很多,但OPPOFindN2Flip算得上是最特殊的一款。主要是其他品牌的小折叠外屏尺寸都比较小,实用性方面做得不够,而OPPOFindN2Flip的外屏有骁龙778G之后,7系列基本就在原地踏步华为nova11的发布会官宣了。机子咱们先不具体聊,我们来聊聊爆料里面的一个永远滴神骁龙778G是的,根据数码博主爆料的消息,今年的nova11还会继续使用高通骁龙778G这颗芯片影视宝藏库!极空间私有云,可成为让idol触手可及的追星神器在这个信息爆炸的时代,不知道大家是否跟我有一样的困扰,硬件设备更新的速度跟不上信息接收的量度,特别是偶像的各种营业视频或者照片热播剧等等。以前由于追星,需要保存偶像大量的影视街拍以Q1全球PC出货量排名出炉苹果跌幅最大集微网消息,市调机构IDC在最新报告中指出,2023年第一季度全球PC(个人电脑)出货量为5690万台,年减29。其中,苹果跌幅最大,为40。5。IDC指出,需求疲软库存过剩和宏观幽灵线东京XboxPC版上线大型更新蜘蛛丝发布4月12日今天,B社发行,TangoGameworks开发的人气游戏幽灵线东京XboxPC(MicrosoftStore)版上线,同时大型更新蜘蛛丝发布,敬请期待。在幽灵线东京的世两人投票无人点否,玩家逆天操作,从公会账上划走2。2万亿游戏币CCP公司发布于2003年的太空沙盒游戏EVEOnline,运营时间甚至比魔兽世界还要长。虽然影响力和热度不如后者,可EVEOnline却很可能是整个游戏圈中,拥有最硬核玩法和最忠租号逃避限游令该严打严格的限游令下,很多网络游戏平台服务商严格限制向未成年人提供网络游戏服务的时间,并要求实名注册,部分企业还设置多重人脸验证关卡,防范未成年人网络沉迷。平台的设置让家长省了不少心,但97版三兄弟代言!天龙八部2飞龙战天4月14日公测完美世界发行快科技4月12日消息,天龙八部2飞龙战天官方已宣布,将于2023年4月14日上午900正式开启公测。此次公测为不限号不删档测试,覆盖安卓iOS双平台,2023年4月14日上午900玩家为生化危机4重制版加入2B变身MOD随着生化危机4重制版推出佣兵模式,高级用户对PC版进行解包获得了更多游戏资源,于是PC版的玩法也变得更多起来,像是使用艾达王游玩主线流程这样的MOD自不必说,现在已经有玩家将尼尔机听说接吻会怀孕欸!剑与远征联动Re0剑与远征我怀孕了你要负责。根据恋爱合约第3条,乙方必须配合甲方的一些情侣小活动。今天我想来一场角色扮演,来一场异世界的冒险。今天我就是你的专属女主,我叫菜月皮,爱蜜诗涵,独属于你的骑士,我