Java多线程进程

时间:2014-12-16 19:45:54

标签: java multithreading input process

我为我的公司制作核心服务器管理系统,服务器管理器和服务器本身都是Java jar文件。我需要做的是从服务器管理器启动服务器,服务器需要能够读取控制台输入。但是,我目前编码的方式,它忽略了控制台输入。我相信while循环正在冻结线程,但IDK该怎么做。有什么想法吗?

Process process = Runtime.getRuntime().exec("sh start.sh");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;

while((line = reader.readLine()) != null){
  System.out.println(line);
}

1 个答案:

答案 0 :(得分:0)

从技术上讲,你的while循环并没有冻结线程 - 对reader.readLine()的调用是。我建议您同时收听InputStreamErrorStream,并在您需要使用Threads或java NIO的同时执行这两项操作。对于Thread ed解决方案,我构建并使用DataFetcher来实现此类目的。您需要做的就是在DataFetcher周围创建InputStream,添加FetcherListener,然后使用新的DataFetcher

启动Thread