打字猴:1.700450179e+09
1700450179
1700450180 private static class TcpServerExceptionHandler implements
1700450181
1700450182 Thread.UncaughtExceptionHandler{
1700450183
1700450184 @Override
1700450185
1700450186 public void uncaughtException(Thread t, Throwable e){
1700450187
1700450188 //记录线程异常信息
1700450189
1700450190 System.out.println(“线程”+t.getName()+“出现异常,自行重启,请分析原因。”);
1700450191
1700450192 e.printStackTrace();
1700450193
1700450194 //重启线程,保证业务不中断
1700450195
1700450196 new TcpServer();
1700450197
1700450198 }
1700450199
1700450200 }
1700450201
1700450202 }
1700450203
1700450204 这段代码的逻辑比较简单,在TcpServer类创建时即启动一个线程,提供TCP服务,例如接收和发送文件,具体逻辑在run方法中实现。同时,设置了该线程出现运行期异常(也就是Uncaught Exception)时,由TcpServerExceptionHandler异常处理器来处理。那TcpServerExceptionHandler异常处理器做什么事呢?两件事:
1700450205
1700450206 记录异常信息,以便查找问题。
1700450207
1700450208 重新启动一个新线程,提供不间断的服务。
1700450209
1700450210 有了这两点,TcpServer就可以稳定地运行了,即使出现异常也能自动重启。客户端代码比较简单,只需要new TcpServer()即可,运行结果如下:
1700450211
1700450212 系统正常运行:0
1700450213
1700450214 系统正常运行:1
1700450215
1700450216 系统正常运行:2
1700450217
1700450218 线程Thread-0出现异常,自行重启,请分析原因。
1700450219
1700450220 java.lang.RuntimeException
1700450221
1700450222 at TcpServer.run(Client.java:30)
1700450223
1700450224 at java.lang.Thread.run(Thread.java:619)
1700450225
1700450226 系统正常运行:0
1700450227
1700450228 系统正常运行:1
[ 上一页 ]  [ :1.700450179e+09 ]  [ 下一页 ]