如何在Java中停止在阻塞读取操作中等待的线程?

2022-09-02 01:54:39

我有一个线程执行以下代码:

public void run() {
    try {
        int n = 0;
        byte[] buffer = new byte[4096];
        while ((n = in.read(buffer)) != -1) {
            out.write(buffer, 0, n);
            out.flush();
        }
    } catch (IOException e) {
        System.out.println(e);
    }
}

在哪里。如何优雅地停止此类线程?关闭 和 使用似乎都不起作用。inSystem.inSystem.inThread.interrupt


答案 1

这是因为读取 System.in(InputStream)是一种阻塞操作。

查看此处 是否可以从超时的输入流中读取?


答案 2

你偶然发现了一个9年的错误,没有人愿意修复。他们说这个错误报告中有一些解决方法。最有可能的是,您需要找到其他方法来设置超时(忙于等待似乎是不可避免的)。