Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading - Fatal编程技术网

Java停止服务器线程

Java停止服务器线程,java,multithreading,Java,Multithreading,以下代码是我的应用程序中的服务器代码: private int serverPort; private Thread serverThread = null; public void networkListen(int port){ serverPort = port; if (serverThread == null){ Runnable serverRunnable = new ServerRunnable(); serverThrea

以下代码是我的应用程序中的服务器代码:

private int serverPort;

private Thread serverThread = null;

public void networkListen(int port){

    serverPort = port;

    if (serverThread == null){
        Runnable serverRunnable = new ServerRunnable();
        serverThread = new Thread(serverRunnable);
        serverThread.start();
    } else {

    }
}

public class ServerRunnable implements Runnable {

    public void run(){

        try {

            //networkConnected = false;
            //netMessage = "Listening for Connection";
            //networkMessage = new NetworkMessage(networkConnected, netMessage);
            //setChanged();
            //notifyObservers(networkMessage);

            ServerSocket serverSocket = new ServerSocket(serverPort, backlog);

            commSocket = serverSocket.accept();

            serverSocket.close();
            serverSocket = null;

            //networkConnected = true;
            //netMessage = "Connected: " + commSocket.getInetAddress().getHostAddress() + ":" +
                    //commSocket.getPort();
            //networkMessage = new NetworkMessage(networkConnected, netMessage);
            //setChanged();
            //notifyObservers(networkMessage);

        } catch (IOException e){

            //networkConnected = false;
            //netMessage = "ServerRunnable Network Unavailable";
            //System.out.println(e.getMessage());
            //networkMessage = new NetworkMessage(networkConnected, netMessage);
            //setChanged();
            //notifyObservers(networkMessage);
        }
    }
}
代码的工作方式是,如果我尝试直接连接,两端都会通信和更新

问题是,当我在侦听连接时,如果我想退出侦听,那么服务器线程将继续运行并导致问题

我知道我不应该在线程上使用.stop(),所以我想知道考虑到这一点,解决方案会是什么样子


编辑:注释掉不需要的代码。

初始化ServerSocket后,使用。将accept放在一个循环中,捕捉超时。根据是否要继续,从循环中断并从运行返回。

从外部线程关闭服务器套接字。根据关于阻塞的文档,accept将抛出SocketException,您可以关闭线程。

非常感谢您的“中断循环”-这是关键!