我正在使用多线程环境,其中一个线程通过重复调用不断侦听用户输入scanner.nextLine()
。
要结束应用程序,此运行循环将由另一个线程停止,但侦听线程不会停止,直到最后一个用户输入完成(由于nextLine()
).
关闭流似乎不是一个选择,因为我正在阅读System.in
,它返回一个InputStream
那是不可关闭的。
有没有办法中断扫描仪的阻塞,使其返回?
thanks
This article http://www.javaspecialists.eu/archive/Issue153.html描述了一种避免读取时阻塞的方法。它提供了代码片段,您可以按照我在评论中指出的方式进行修改。
import java.io.*;
import java.util.concurrent.Callable;
public class ConsoleInputReadTask implements Callable<String> {
public String call() throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("ConsoleInputReadTask run() called.");
String input;
do {
System.out.println("Please type something: ");
try {
// wait until we have data to complete a readLine()
while (!br.ready() /* ADD SHUTDOWN CHECK HERE */) {
Thread.sleep(200);
}
input = br.readLine();
} catch (InterruptedException e) {
System.out.println("ConsoleInputReadTask() cancelled");
return null;
}
} while ("".equals(input));
System.out.println("Thank You for providing input!");
return input;
}
}
您可以直接使用此代码,也可以编写一个新的可关闭的 InputStream 类,包装本文中描述的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)