如何停止服务器线程(以后可能会激活它)?

时间:2015-11-01 15:42:13

标签: java sockets server

我正在创建一个多线程服务器,它将从客户端接收消息,处理并发回结果。

问题是当我希望服务器线程停止时,它不会。

即使设置stopFlag=true,客户端仍然可以连接到服务器并获得结果。

如何停止服务器线程(以后可能会激活它)?

我在下面尝试了所有这些,但它们没有用。

Close listening ServerSocket

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);
    }
}

}

1 个答案:

答案 0 :(得分:0)

您需要中断正在等待从客户端读取内容的套接字accept()方法。接受超时可以执行,或者调用close() from another thread

其次,您的stopRun变量应该是易变的,以便在updated时可以在其他线程上看到。