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

vit*_*aut 20 java multithreading stream

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里inSystem.in.我怎样才能优雅地停止这样的线程?无论是关闭System.in还是使用Thread.interrupt似乎都不起作用.

Pet*_*Mmm 8

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

看这里是否可以从具有超时的InputStream读取?


Den*_*kiy 7

你偶然发现了一个没有人愿意解决的9岁的小虫.他们说这个bug报告中有一些解决方法.最有可能的是,你需要找到一些其他方法来设置超时(繁忙的等待似乎是不可避免的).