我正在阅读KnockKnock服务器示例http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html,我发现了一些代码,我有几个问题。Try-with-resources and ServerSockets
try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
while (listening) {
new KKMultiServerThread(serverSocket.accept()).start();
}
} catch (IOException e) {
System.err.println("Could not listen on port " + portNumber);
System.exit(-1);
}
我的问题:
- 什么是
serverSocket
范围有多大?它是否可用于捕获的异常块或周围块中的其他位置?如果没有,如何可靠地关闭插座? - 在这种情况下,套接字是如何关闭的?我认为这个示例可以停止执行的唯一方法是强制结束该过程,但是在此之后,开放套接字会发生什么情况?该端口是否不再适用于其他应用程序(甚至是相同的应用程序)?
new KKMultiServerThread
怎么办?一旦线程完成其工作,线程是否清理了该线程?
服务器套接字在析构函数中关闭,线程也“停止”。 –
'serverSocket'变量的范围在这里讨论:http://stackoverflow.com/questions/18691352/try-with-resources-scope-of-resource – FGreg
@JeroenBollen Java中没有析构函数。 – EJP