1700450130
编写高质量代码:改善Java程序的151个建议 建议122:使用线程异常处理器提升系统可靠性
1700450131
1700450132
我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一是避免线程阻塞,保证接收的数据尽快处理;二是接口的稳定性和可靠性问题,数据包很复杂,接口服务的系统也很多,一旦守候线程出现异常就会导致Socket停止响应,这是非常危险的,那我们有什么办法来避免吗?
1700450133
1700450134
Java 1. 5版本以后在Thread类中增加了setUncaughtExceptionHandler方法,实现了线程异常的捕捉和处理。可能大家会有一个疑问:如果Socket应用出现了不可预测的异常是否可以自动重启呢?其实使用线程异常处理器很容易解决,我们来看一个异常处理器应用的例子,代码如下:
1700450135
1700450136
class TcpServer implements Runnable{
1700450137
1700450138
//创建后即运行
1700450139
1700450140
public TcpServer(){
1700450141
1700450142
Thread t=new Thread(this);
1700450143
1700450144
t.setUncaughtExceptionHandler(new TcpServerExceptionHandler());
1700450145
1700450146
t.start();
1700450147
1700450148
}
1700450149
1700450150
@Override
1700450151
1700450152
public void run(){
1700450153
1700450154
//正常业务运行,运行3秒
1700450155
1700450156
for(int i=0;i<3;i++){
1700450157
1700450158
try{
1700450159
1700450160
Thread.sleep(1000);
1700450161
1700450162
System.out.println(“系统正常运行:”+i);
1700450163
1700450164
}catch(InterruptedException e){
1700450165
1700450166
e.printStackTrace();
1700450167
1700450168
}
1700450169
1700450170
}
1700450171
1700450172
//抛出异常
1700450173
1700450174
throw new RuntimeException();
1700450175
1700450176
}
1700450177
1700450178
//异常处理器
[
上一页 ]
[ :1.700450129e+09 ]
[
下一页 ]