第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

ThreadPoolExecutor線程池任務(wù)執(zhí)行失敗的時(shí)候會(huì)怎樣

標(biāo)簽:
深度學(xué)習(xí)

接上一篇 《JDK1.8中的线程池

1.  任务执行失败时的处理逻辑

1.1.  Worker

Worker相当于线程池中的线程

可以看到,Worker有几个重要的属性:

  • thread : 这是Worker运行的线程,可以理解为一个Worker就是一个线程

  • firstTask : 初始任务,可能为为null

  • completedTasks : Worker完成的任务数

同时,还应该注意到,在构造方法中给thread赋值为一个新线程。由于Worker实现了Runnable接口,也就是说它本身就是可执行的任务,当它启动的时候理所当然应该运行run()方法,而它的run()方法中调用了runWorker(this)方法

1.2.  Worker是如何创建的

主要是:创建Workder对象,并将该对象加入到Worker集合中,最后启动Worker(PS:启动Worker中的线程是启动Worker)

1.3.  runWorker(this)

可以看到,创建线程的时候传的是this,this代表的是Worker对象,而Worker是一个Runnable,因此当调用线程的start()方法后执行的是Worker的run()方法,而Worker的run()方法里面调用的时候runWorker(this),因此,接下来重点看一下runWorker(this)

如果task.run()方法抛异常,则会被catch捕捉到,但是catch又将异常抛出去了,外层的两个try没有捕获,跳出循环,执行3个finally

我们只看最后一个finally

看到这里,一切真相大白

当任务执行失败后,该Workder会被从Worker集合中删除,然后,只要线程池当前还在继续处理任务,则重新创建一个新的Worker

也就是说,任务执行失败后,原来的Worker就死了,如果线程池还在继续处理任务,则再创建一个新的Worker

2.  拒绝策略

  

四种策略:

  1. 直接抛异常(默认)

  2. 什么也不做,也不抛异常

  3. 如果线程池当期处于RUNNING状态,则执行这个任务,否则什么也不做

  4. 如果线程池当前处于RUNNING状态,则删除队列头部的任务,然后将该任务加到工作任务队列中

3.  其它相关

JDK1.8中的线程池

原文出处: http://idcbgp.cn/search/article?words=threadpoolexecu  

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消