簡體   English   中英

如何停止服務器線程(以后可能會激活它)?

[英]How can I stop the server thread(and may activate it later)?

我正在創建一個多線程服務器,該服務器將從客戶端接收消息,處理並發送回結果。

問題是當我希望服務器線程停止時,它不會停止。

即使設置stopFlag=true ,客戶端仍然可以連接到服務器並獲取結果。

如何停止服務器線程(以后可能會激活它)?

我在下面嘗試了所有這些方法,但是它們沒有起作用。

關閉監聽ServerSocket

Java服務器套接字程序在一天后停止監聽

關閉監聽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);
    }
}

}

您需要中斷正在等待從客戶端讀取內容的套接字accept()方法。 接受超時可能會發生,或者從另一個線程調用close()

其次,您的stopRun變量應該是volatile,以便在更新時可以在其他線程上看到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM