【发布时间】:2013-11-21 20:37:21
【问题描述】:
我正在阅读http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html 上的 KnockKnock 服务器示例,发现了一些我有一些疑问的代码。
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变量的范围在这里讨论:stackoverflow.com/questions/18691352/… -
@JeroenBollen Java 中没有析构函数。
-
@EJP 很抱歉弄糊涂了
标签: java multithreading sockets try-catch serversocket