Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止服务器线程(以后可能会激活它)?_Java_Sockets_Server - Fatal编程技术网

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

Java 如何停止服务器线程(以后可能会激活它)?,java,sockets,server,Java,Sockets,Server,我正在创建一个多线程服务器,它将接收来自客户端的消息,处理并返回结果 问题是当我希望服务器线程停止时,它不会停止 即使设置stopFlag=true,客户端仍然可以连接到服务器并获得结果 如何停止服务器线程并在以后激活它 我试过下面所有的方法,但都不管用 }您需要中断socket-accept方法,该方法正在等待从客户端读取内容。accept上的超时可以执行以下操作,或调用 其次,您的stopRun变量应该是可变的,以便在其他线程上可以看到。您最好提及您已经尝试过的内容,但也请添加在尝试这些

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

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

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

如何停止服务器线程并在以后激活它

我试过下面所有的方法,但都不管用


}

您需要中断socket-accept方法,该方法正在等待从客户端读取内容。accept上的超时可以执行以下操作,或调用


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

您最好提及您已经尝试过的内容,但也请添加在尝试这些解决方案时确实不起作用的内容。好吧,它们不会显示任何错误。客户端和服务器运行正常。唯一的问题是,即使我设置了stopFlag,我也无法关闭服务器线程。您是否确实尝试了第三种解决方案?包括其中有同步方法这一事实吗?是的,第三个解决方案将setSoTimeout和一条注释放在一起,建议关闭服务器套接字。但它不起作用,所以我把它们取下来,试着做些别的。此代码是我拥有的最新代码。不,第三个解决方案使用了同步方法来设置停止变量。因此,停止变量的值对服务器线程是可见的。这是解决方案的要点。尽管简单地使用volatile可能也会起作用。
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);
    }
}