【发布时间】:2019-12-31 08:19:02
【问题描述】:
我有一个多线程进程来监听消息并处理它们。如果收到的消息之一是“关闭”,我希望能够关闭进程。我已经实现了除关机部分之外的所有内容。
我有一个使用start方法扩展java.net.ServerSocket 的“Multi”类。里面……
java.net.Socket socket = null;
while (true) {
try {
socket = this.accept();
new Thread(new SocketThread(socket, verifier, threading)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
那个 SocketThread 是 implements Runnable 的另一个类。有什么办法可以使这项工作?
【问题讨论】:
-
如果你使用的是spring boot(推荐),你可以使用内置的
/actuator/shutdown端点 -
您应该保留一个正在运行的线程列表,一旦关闭请求到达,就中断线程(或等到它们完成)。使用标志来指示进程是否正在运行并且可以启动新线程,或者收到关闭请求并且不能再为请求提供服务。
-
没有。您只需要在收到此消息时关闭
ServerSocket。您应该让所有当前正在运行的处理程序运行到完成或读取超时。强制关闭它们是残酷和毫无意义的。 @PavelSmirnov -
@user207421,我没有说“强制关闭”,我说的是“中断”。
-
您要关闭哪个进程? while (true) 还是 SocketThread?
标签: java multithreading maven sockets runnable