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 ]
[
下一页 ]