java - 如何从主线程终止子线程

标签 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();
    }
}

最佳答案

交换&&顺序。 && 运算符是短路的,因此如果左侧失败,右侧将不会执行。 || 的情况正好相反。

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

关于java - 如何从主线程终止子线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51951492/

相关文章:

python - 方法的 "self"参数是否受到某种保护?

java - 缺少 <some_project> 的 POM,没有可用的依赖项信息

通过 Cron 的 PHP 并发

multithreading - 使用 applescriptobjc 实现 GDC

java - JavaFX 应用程序线程的预期行为是什么

java - 如何让notify()在wait()之前执行,我尝试使用sleep()但仍然不起作用

java - 确定 JFreeCharts 中 2 个点之间的值

java - 当字符串包含 [] 字符时替换字符串中的子字符串

java - 为什么审计返回空版本

java - 服务中的线程在主线程中进行了太多工作