建議122:使用線程異常處理器提升系統(tǒng)可靠性

  我們要編寫一個(gè)Socket應(yīng)用,監(jiān)聽指定端口,實(shí)現(xiàn)數(shù)據(jù)包的接收和發(fā)送邏輯,這在早期系統(tǒng)間進(jìn)行數(shù)據(jù)交互是經(jīng)常使用的,這類接口通常需要考慮兩個(gè)問題:一個(gè)是避免線程阻塞,保證接收的數(shù)據(jù)盡快處理;二是:接口的穩(wěn)定性和可靠性問題,數(shù)據(jù)包很復(fù)雜,接口服務(wù)的系統(tǒng)也很多,一旦守候線程出現(xiàn)異常就會(huì)導(dǎo)致Socket停止,這是非常危險(xiǎn)的,那我們有什么辦法避免嗎?

  Java1.5版本以后在Thread類中增加了setUncaughtExceptionHandler方法,實(shí)現(xiàn)了線程異常的捕捉和處理??赡艽蠹視?huì)有一個(gè)疑問:如果Socket應(yīng)用出現(xiàn)了不可預(yù)測(cè)的異常是否可以自動(dòng)重啟呢?其實(shí)使用線程異常處理器很容易解決,我們來看一個(gè)異常處理器應(yīng)用實(shí)例,代碼如下: 

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

class TcpServer implements Runnable {    // 創(chuàng)建后即運(yùn)行
    public TcpServer() {
        Thread t = new Thread(this);
        t.setUncaughtExceptionHandler(new TcpServerExceptionHandler());
        t.start();
    }
    @Override    public void run() {        for (int i = 0; i < 3; i++) {            try {
                Thread.sleep(1000);
                System.out.println("系統(tǒng)正常運(yùn)行:&quo