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,您可以关闭线程。非常感谢您的“中断循环”-这是关键!