你的位置:首页 > 软件开发 > Java > 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议122~125)

编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议122~125)

发布时间:2016-10-19 11:00:13
建议122:使用线程异常处理器提升系统可靠性  我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一个是避免线程阻塞,保证接收的数据尽快处理;二是:接口的稳定性和可靠性问题,数据包很复杂 ...

编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议122~125)

建议122:使用线程异常处理器提升系统可靠性

  我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一个是避免线程阻塞,保证接收的数据尽快处理;二是:接口的稳定性和可靠性问题,数据包很复杂,接口服务的系统也很多,一旦守候线程出现异常就会导致Socket停止,这是非常危险的,那我们有什么办法避免吗?

  Java1.5版本以后在Thread类中增加了setUncaughtExceptionHandler方法,实现了线程异常的捕捉和处理。可能大家会有一个疑问:如果Socket应用出现了不可预测的异常是否可以自动重启呢?其实使用线程异常处理器很容易解决,我们来看一个异常处理器应用实例,代码如下: 

class TcpServer implements Runnable {  // 创建后即运行  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("系统正常运行:" + i);      } catch (InterruptedException e) {        e.printStackTrace();      }    }    // 抛出异常    throw new RuntimeException();  }  // 异常处理器  private static class TcpServerExceptionHandler implements      Thread.UncaughtExceptionHandler {    @Override    public void uncaughtException(Thread t, Throwable e) {      // 记录线程异常信息      System.out.println("线程" + t.getName() + " 出现异常,自行重启,请分析原因。");      e.printStackTrace();      // 重启线程,保证业务不中断      new TcpServer();    }  }}

原标题:编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议122~125)

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。