我有一个Java线程:
class MyThread extends Thread {
@Override
public void run() {
BufferedReader stdin =
new BufferedReader(new InputStreamReader(System.in));
String msg;
try {
while ((msg = stdin.readLine()) != null) {
System.out.println("Got: " + msg);
}
System.out.println("Aborted.");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
在另一个线程中,如何stdin.readline()在此线程中中止调用,以便打印此线程Aborted.?我试过了System.in.close(),但这没有任何区别,stdin.readline()仍然是阻塞.
我对没有的解决方案感兴趣
System.in).Heinz Kabutz的新闻通讯显示了如何System.in使用缓冲区和中止读取ExecutorService.
现在,我不知道这种方法是否泄漏,不可移植或是否有任何非明显的副作用.就个人而言,我不愿意使用它.
您可以使用NIO通道和文件描述符执行某些操作 - 我自己使用它们进行的实验并未产生任何结果.
我的第一反应是,一根线确实System.in不搭在一起。
因此,首先,将其拆分,以便线程代码不会触及任何静态,包括System.in.
线程从缓冲区读取数据InputStream并将其传递到缓冲区。将 an 传递InputStream到现有线程中,该线程从缓冲区中读取数据,但也会检查您是否尚未中止。
| 归档时间: |
|
| 查看次数: |
9422 次 |
| 最近记录: |