我正在创建一个多线程服务器,它将从客户端接收消息,处理并发回结果。
问题是当我希望服务器线程停止时,它不会。
即使设置stopFlag=true
,客户端仍然可以连接到服务器并获得结果。
如何停止服务器线程(以后可能会激活它)?
我在下面尝试了所有这些,但它们没有用。
Java server socket program after one day it stops listening
Close listening ServerSocket http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html
public class ServerStart implements Runnable{
private JTextArea servLog;
private boolean stopFlag=false;
public ServerStart(JTextArea servLog){
this.servLog=servLog;
}
public void setStopFlag(boolean stop){
stopFlag=stop;
}
@Override
public void run() {
int port=444;
try {
ServerSocket serverSock = new ServerSocket(port);
synchronized(this){
while(!stopFlag){
Socket clientSock=null;
try{
clientSock = serverSock.accept();
}catch(IOException e){
if(stopFlag){
System.out.println("Server stop");
return;
}
throw new RuntimeException("Error accepting client connection", e);
}
Thread listener = new Thread(new Socket_test(clientSock, port,servLog));
listener.start();
}
serverSock.close();
}
} catch (IOException ex) {
Logger.getLogger(ServerStart.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 0 :(得分:0)
您需要中断正在等待从客户端读取内容的套接字accept()
方法。接受超时可以执行,或者调用close() from another thread
其次,您的stopRun
变量应该是易变的,以便在updated时可以在其他线程上看到。