我正在编写服务器客户端应用程序。我有三个类,即 Server.java,TestServer.java,Client.java。
TestServer 和客户端用于测试我的服务器类。
在 Server.java 中,我有两个函数 receiveInput 和 sendOutput ,用于向/从客户端发送和接收消息。我在两个独立的线程中运行每两个函数。
两个函数就像这样:
public void sendOutput(){
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
try{
DataOutputStream out = new DataOutputStream(client.getOutputStream());
while(continueRunning){
if(!(messageToBeSent = stdIn.readLine()).equals("/exit"))
out.writeUTF(messageToBeSent);
}else{
continueRunning = false;
}
}
}catch(IOException e){
System.out.println("Error: sending message");
System.out.println(e);
}
}
应用程序运行正常,但是当我从客户端或服务器键入 / exit 时,我想同时关闭两个线程。
但是,例如,当我从客户端键入 / exit 时,运行 receiveInput 函数的线程停止运行并将 continueRunning 变量设置为假。为了让其他线程停止,我需要键入一些内容,以便循环运行一次,并且线程看到 continueRunning 设置为false并停止运行。
如何在其他线程停止后立即停止?
希望我很清楚,
感谢。
答案 0 :(得分:0)
您可以将continueRunning
设为共享静态&易变量。
声明如下:
public static volatile continueRunning = true;
假设您在Server类中创建了它,那么您可以从Client类引用变量,如下所示:
if (Server.continueRunning) {
// do something
}
答案 1 :(得分:0)
在server.java中你应该有一个静态变量
静态变量是在函数调用中保持相同值的变量。