打字猴:1.700450129e+09
1700450129 编写高质量代码:改善Java程序的151个建议 [:1700438197]
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 ]  [ 下一页 ]