建議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)用實例,代碼如下:
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