[英]How can I stop a Java Thread from another one?
也许我在想复杂化,但是我有以下情况:
我有一个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(),但那有点麻烦。
这是一种方法:
提供一个listening
,可以从另一个类/线程访问。
在ServerSocket
上设置一个合理的超时时间(例如1秒),并处理SocketTimeoutException
。
要停止线程,请将listening
设置为false
,则线程将在1秒钟内停止。 如果需要更好的控制,请研究java.nio
的异步I / O类。
您可以使用setter将侦听定义为volatile
,并在每次要停止Thread时将其设置为false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.