在Java中关闭另一个线程时关闭一个线程

时间:2014-03-07 18:41:17

标签: java multithreading

我正在编写服务器客户端应用程序。我有三个类,即 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并停止运行。

如何在其他线程停止后立即停止?

希望我很清楚,

感谢。

2 个答案:

答案 0 :(得分:0)

您可以将continueRunning设为共享静态&易变量。

声明如下:

public static volatile continueRunning = true;

假设您在Server类中创建了它,那么您可以从Client类引用变量,如下所示:

if (Server.continueRunning) {
    // do something
}

答案 1 :(得分:0)

在server.java中你应该有一个静态变量

静态变量是在函数调用中保持相同值的变量。