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

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

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

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

class TcpServer implements Runnable {    // 創(chuàng)建后即運行
    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)正常運行:&quo