記錄一下一次處理線程池的問題

Java旬昭。遇到一個(gè)問題。需要停止一個(gè)運(yùn)行時(shí)的模塊T

模塊T里又分了子模塊ABCDE

每個(gè)子模塊都有自己的線程池

T是一個(gè)被調(diào)用的角色煌贴。

然后我可以確定的是每個(gè)子模塊的線程池的submit肯定是要去調(diào)用

另一個(gè)模塊J的(這點(diǎn)非常重要)

T被觸發(fā)后逗余。ABCDE之間會(huì)有數(shù)據(jù)輪轉(zhuǎn)。當(dāng)然還有鎖的使用

現(xiàn)在外部調(diào)用方判斷T需要停止泽腮。然后重置。再重新調(diào)用衣赶。

我一開始以為很簡(jiǎn)單啊诊赊。把變量設(shè)置成null。然后重新new不就完了么府瞄。

然后用jstack 發(fā)現(xiàn)線程還在碧磅。數(shù)據(jù)也還在。遵馆。鲸郊。而且這些線程感覺就要很久之后才會(huì)被回收了(因?yàn)橐萺un方法全部執(zhí)行完。然后系統(tǒng)gc货邓。秆撮。)。因?yàn)槲矣玫氖蔷€程池换况。

然后我又去了解了一下shutdown职辨。shutdownNow和isTerminated 3個(gè)方法

結(jié)合我自己的代碼。我說一下我的方法把

因?yàn)槲业逆i是我自己用atomicBoolean封裝的一個(gè)單獨(dú)的類复隆。

所以我可以控制是不是真的要用到鎖拨匆,如果用lock的可能就還需要處理lock姆涩。

我ABCDE這些子模塊都有父類挽拂。創(chuàng)建線程池的方法是在父類里的。

我用的一般就是newFixedThreadPool和newSingleThreadExecutor骨饿。這2個(gè)

所以我就自定義了一個(gè)類重寫了這2個(gè)方法亏栈。再自定義了一個(gè)類(AThreadPoolExecutor)繼承自ThreadPoolExecutor.重寫了submit和execute這2個(gè)方法台腥。

@Override

public Futuresubmit(Runnable task) {

try{

return super.submit(task);

? ? }catch (RejectedExecutionException executionException){

}

return null;

}

@Override

public Futuresubmit(Runnable task, T result) {

try{

return super.submit(task, result);

? ? }catch (RejectedExecutionException executionException){

}

return null;

}

@Override

public Futuresubmit(Callable task) {

try{

return super.submit(task);

? ? }catch (RejectedExecutionException executionException){

}

return null;

}

@Override

public void execute(Runnable command) {

try {

super.execute(command);

? ? }catch (Exception e){

if (einstanceof InterruptedException){

}else {

throw? e;

? ? ? ? }

}

}

類似這樣。這樣就保證我在停止的時(shí)候碰到提交和中斷就不會(huì)出問題绒北。(因?yàn)橥饷鎠ubmit的地方實(shí)在太多了黎侈。。改不過來(lái))

然后呢闷游。我直接去調(diào)用每個(gè)線程池的shutdownNow峻汉。把所有未執(zhí)行的任務(wù)都去除。

然后因?yàn)槊總€(gè)submit的內(nèi)容都是要去調(diào)用J的脐往。照著模塊之間調(diào)用你起碼要封裝一層的做法

所以我在判斷我要停止的時(shí)候休吠。直接在調(diào)用J的那個(gè)地方去判斷了線程的狀態(tài)

if (Thread.currentThread().isInterrupted()){

throw? new InterruptedException(Thread.currentThread().getName());

}

return super.run(log,o,method,objects,methodProxy);

就像這樣。這就能保證我所有的submit都能被很快的處理完(這當(dāng)然是因?yàn)榈膕ubmit里沒有啥while啊for啊這種耗時(shí)循環(huán)這種)

然后剩下的就簡(jiǎn)單了业簿。

把線程池重開就完事瘤礁。

重開的時(shí)候判斷下isTerminated

如果是false。梅尤。我現(xiàn)在的做法就是先打個(gè)警告log柜思。發(fā)現(xiàn)再來(lái)排查問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巷燥,一起剝皮案震驚了整個(gè)濱河市厂榛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锌订,老刑警劉巖惊完,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異邀跃,居然都是意外死亡霉咨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拍屑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)途戒,“玉大人,你說我怎么就攤上這事僵驰∨缯” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蒜茴,是天一觀的道長(zhǎng)星爪。 經(jīng)常有香客問我,道長(zhǎng)粉私,這世上最難降的妖魔是什么顽腾? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上抄肖,老公的妹妹穿的比我還像新娘久信。我一直安慰自己,他們只是感情好漓摩,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布裙士。 她就那樣靜靜地躺著,像睡著了一般管毙。 火紅的嫁衣襯著肌膚如雪腿椎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天夭咬,我揣著相機(jī)與錄音酥诽,去河邊找鬼。 笑死皱埠,一個(gè)胖子當(dāng)著我的面吹牛肮帐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播边器,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼训枢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了忘巧?” 一聲冷哼從身側(cè)響起恒界,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砚嘴,沒想到半個(gè)月后十酣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡际长,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年耸采,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片工育。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虾宇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出如绸,到底是詐尸還是另有隱情嘱朽,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布怔接,位于F島的核電站搪泳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扼脐。R本人自食惡果不足惜岸军,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凛膏,春花似錦杨名、人聲如沸脏榆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)须喂。三九已至吁断,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坞生,已是汗流浹背仔役。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留是己,地道東北人又兵。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卒废,于是被迫代替她去往敵國(guó)和親沛厨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容