Java線程監(jiān)聽(tīng),意外退出線程后自動(dòng)重啟
業(yè)務(wù)需求:因?yàn)樽髡叩臉I(yè)務(wù)需要線程一直循環(huán)監(jiān)聽(tīng)某個(gè)端口發(fā)過(guò)來(lái)的數(shù)據(jù)并進(jìn)行分析處理。然而發(fā)現(xiàn)循環(huán)某次線程出現(xiàn)未知錯(cuò)誤會(huì)導(dǎo)致整個(gè)監(jiān)聽(tīng)線程自動(dòng)終止。所以需要線程某次出現(xiàn)錯(cuò)誤中止時(shí)可以監(jiān)聽(tīng)到,并且重新啟動(dòng)監(jiān)聽(tīng)數(shù)據(jù)的線程。讓監(jiān)聽(tīng)業(yè)務(wù)不會(huì)斷開(kāi)。下面介紹如何實(shí)現(xiàn):
首先添加一個(gè)Listener類,為監(jiān)聽(tīng)類。

然后重寫(xiě)監(jiān)聽(tīng)類的update方法,其實(shí)這個(gè)方法就是在線程出現(xiàn)未知異常,線程被迫終止的時(shí)候調(diào)用,因?yàn)樽髡呦氘?dāng)線程出現(xiàn)未知錯(cuò)誤終止的時(shí)候,程序自動(dòng)重新啟動(dòng),所以就在update的方法繼續(xù)啟動(dòng)這個(gè)線程。

好了,到這里監(jiān)聽(tīng)類就寫(xiě)完了。接下來(lái)就是線程類。線程類除了常規(guī)實(shí)現(xiàn)Runnable,還需要繼承Observable

n
線程類除了繼承的改動(dòng),第一步:需要添加一個(gè)doBusiness方法,

第二步:則是在run方法進(jìn)行try catch,catch的時(shí)候執(zhí)行doBusiness方法,進(jìn)行監(jiān)聽(tīng)并調(diào)用重啟線程操作
(還有一個(gè)問(wèn)題:在catch的時(shí)候必須break進(jìn)行跳出循環(huán))

好了,到了最后一個(gè)步驟了。就是改動(dòng)
main類主線程
第三步:需要將監(jiān)聽(tīng)的線程通過(guò)addObserver方法加入執(zhí)行線程里,再啟動(dòng)執(zhí)行線程
