在服务器上关闭AtomicBoolean时机太迟(Java)

问题描述 投票:0回答:1

我正在使用客户端服务器应用程序,并且当通过套接字接收到停止消息时,我想关闭服务器。我的服务器代码如下所示:>

public class Server extends Thread {

 private AtomicBoolean running = new AtomicBoolean(true);


  public synchronized void setRunning(boolean value){
        running.set(value);
    }

 public void run(){

        while(running.get()){
                try {
                     clientSocket = serverSocket.accept();
                     //doing stuff...

                }catch (IOException e) {
                    logger.error("{} \n",e.getMessage());
                }
        }

正在运行的变量在另一个处理我的消息的类中设置。该函数是这样写的

public synchronized void onReceive(Message message){

       if(message.equals(stopMessage)){

           server.setRunning(false);
           for(Client c : clients)
               c.shutdown();
           server.shutdown();
       }
}

[我的问题是,服务器中的while循环在将运行变量设置为false之前执行了一次迭代,并且服务器甚至尝试检查套接字,甚至认为它为null,因为连接到该套接字的客户端已经关闭(客户端也处于关闭状态线程)。我做错了,但我不知道该怎么办。有任何想法吗?谢谢!

我正在使用客户端服务器应用程序,当通过套接字接收到停止消息时,我想关闭服务器。我的服务器代码看起来像这个公共类服务器扩展...

java sockets client-server atomic
1个回答
1
投票
像这样更改while循环:
© www.soinside.com 2019 - 2024. All rights reserved.