也许我想复杂化,但我有以下情况:
我有一个类Server.java扩展Thread,其中包含以下相关代码部分:
public void run() {
while(listening) {
try {
ServerThread cst = new ServerThread(serverSocket.accept());
cst.start();
} catch (IOException e) {
listening = false;
System.out.println(e.getMessage());
}
}
}
我的ServerThread然后处理所有传入的东西。
我现在的问题是,如果有可能通过命令行停止此线程(服务器)。
我尝试添加一个新类,它将处理命令行输入和.interrupt()这个线程,但这有点乱了..
答案 0 :(得分:1)
以这种方式:
为listening
提供可以从其他类/线程访问的setter。
在ServerSocket
上设置合理的超时(例如1秒)并处理SocketTimeoutException
。
要停止线程,请将listening
设置为false
,并在1秒内线程将停止。如果您想要更好的控制,请调查java.nio
中的异步I / O类。
答案 1 :(得分:0)
您可以使用 setter 将收听定义为volatile
,并在需要停止线程时将其设置为来自其他班级的false
。