【发布时间】:2011-12-27 23:40:33
【问题描述】:
我创建了一个小(单线程)服务器并将“工作”代码放在Runnable 中。然后使用 Javas Executor Framework 在后台线程中执行该可运行文件:
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
所以现在,我正在寻找关闭此服务器的好方法。我想添加在不重新启动程序的情况下重新启动服务器的可能性,因此终止整个过程不是一种选择。
What I have found 是这样的:
class LifecycleWebServer {
private final ExecutorService exec = ...;
public void start() throws IOException {
ServerSocket socket = new ServerSocket(80);
while (!exec.isShutdown()) {
final Socket conn = socket.accept();
// Do stuff with the connection...
}
}
public void stop() { exec.shutdown(); }
}
困扰我的是,如果程序已经到达第 7 行 (socket.accept()),并且我调用了 stop()-方法,服务器仍将等到最后一个连接建立然后关闭。
有没有首选的方法来处理这个问题?
【问题讨论】:
-
我为用 C/C++ 编写的套接字代码发布了一个类似的问题,并得到了很好的答案。我怀疑您需要使用非阻塞套接字来达到类似的效果。您是否尝试过从另一个线程关闭套接字并捕获 socket.accept 抛出的异常?我实际上不确定这是否会奏效。 stackoverflow.com/questions/2486335/…
-
类似问题:stackoverflow.com/questions/2983835/… - 好像你需要关闭套接字。
-
[类似问题][1]: - 好像你需要关闭套接字 [1]: stackoverflow.com/questions/2983835/…
-
可以使用 NIO 使套接字可中断吗?这当然适用于客户端套接字;我从未尝试过服务器套接字。
标签: java sockets shutdown executorservice