【发布时间】:2013-08-22 15:05:28
【问题描述】:
我正在编写一个具有多个线程的 Java 程序。其中一个线程负责从标准输入中读取行并对其进行解析。
正常运行时一切正常,但是当程序在后台运行时(在 Linux 中)使用:
$ java -jar my_jar_file &
我的程序挂起(至少在进入前台之前)。
在后台运行时,我真的不需要标准输入,但我也不希望我的程序挂起。
我搜索了一种以编程方式确定进程是否在后台运行但找不到的方法。
这是从标准输入读取的代码:
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inputStreamReader);
String line = null;
try {
while ((line = br.readLine()) != null) {
parseInputLine(line, br);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
据我所知,程序在到达br.readLine() 命令时会挂起。
【问题讨论】:
-
在后台运行程序时从标准输入读取是没有意义的。
-
是的,用于某些读/写操作的标准 I/O 块。如果你希望它是非阻塞的,你应该使用 NIO。
-
我完全同意,这就是为什么我试图找到一种方法来检测我在后台运行,然后甚至不尝试从 STDIN 读取
-
Josh - 什么是“NIO”?
-
@Ari 新输入/输出。比较两者的文章可以找到here
标签: java