如何在主线程中柔和地结束子线程
主线程:
...
...
子线程()
其中子线程的结构
run(){
while(...){
..=serverSocket.accept();
}
}
当在主线程执行System.exit(0)后,出现
java.net.SocketException: socket closed异常。
问题应该出在..=serverSocket.accept()部分强行中断而导致该异常。
我想在执行System.exit(0)之前应该终止它的子线程。
其实直接关主线程也没什么关系,只是希望以柔和的方式结束程序,不能对哪怕小异常视之不理。
------解决方案--------------------没什么好办法,用 try-catch 好了。
------解决方案--------------------请查看通道。
可以设置你所要求的终止受阻塞的ServerSocket
------解决方案--------------------用 ServerSocket.accept() 的话,这种阻塞没有办法主动中断。
如果使用 java.nio.channels.ServerSocketChannel 的话(就是所谓“通道”),就可以在另外一个线程中对本线程进行 interrupt() 来中断它。不过,即使这样,也需要在本线程中 try-catch,差不多。