如何终止主线程

时间:2018-08-21 14:57:04

标签: java multithreading java-threads

我正在尝试终止子线程,这正在等待服务器的输入。我试图用标志来做,但是它停在了 message = serverReader.readLine() && !isClosed(), 因为它等待服务器的输入,并且只有在输入之后才检查标志并中断。但这不是一个好的解决方案,因为没有服务器消息我无法停止它。 我也尝试过先检查标志,然后再检查readline(),但它也无法正常工作。 有什么好的解决办法吗?

@Override
public void run() {
    String message;
    try {
        while((message = serverReader.readLine()) != null && !isClosed()) {
            consoleWriter.println("Other user: " + message);
            consoleWriter.flush();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void setUpNetworking() {
    try {
        Socket socket = new Socket("127.0.0.1", 5000);
        InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
        serverWriter = new PrintWriter(socket.getOutputStream());
        serverReader = new BufferedReader(streamReader);

        //Starting listening messages from server
        incomeReader = new Thread(new IncomeMessagesReader(serverReader, consoleWriter, this));
        incomeReader.start();


        System.out.println("Networking established");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

交换&&顺序。 &&运算符短路,因此如果左侧发生故障,则右侧将不会执行。 ||则相反。

while (!isClosed() && readLine())