Java,等待子进程退出
发布时间:2020-12-15 08:37:32 所属栏目:Java 来源:网络整理
导读:使用 Java的ProcessBuilder我正在创建一组子进程.我可以使用生成的Process对象中的waitFor()方法等待该特定子进程退出. 是否可以阻止任何子进程,以UNIX wait()系统调用的方式? 解决方法 第一步是将每个子进程完成的工作表示为 Future,如下所示: final Proc
使用
Java的ProcessBuilder我正在创建一组子进程.我可以使用生成的Process对象中的waitFor()方法等待该特定子进程退出.
是否可以阻止任何子进程,以UNIX wait()系统调用的方式? 解决方法
第一步是将每个子进程完成的工作表示为
Future,如下所示:
final ProcessBuilder builder = ...; // for each process you're going to launch FutureTask task = new FutureTask(new Callable<Integer>() { @Override public Integer call() { return builder.start().waitFor(); } }; 现在将所有任务提交给执行者: ExecutorService executor = Executors.newCachedThreadPool(); for (FutureTask task : tasks) { executor.submit(task); } // no more tasks are going to be submitted,this will let the executor clean up its threads executor.shutdown(); 现在使用优秀的ExecutorCompletionService类: ExecutorCompletionService service = new ExecutorCompletionService(executor); while (!executor.isTerminated()) { Future<Integer> finishedFuture = service.take(); System.out.println("Finishing process returned " + finishedFuture.get()); } 这个循环将在每个完成任务完成时迭代一次. returnValue将是子进程的退出代码. 现在,您还不确切知道哪个流程已完成.你可以改变Callable而不是返回一个Integer来返回Process,或者更好的是你自己的一个类来表示进程的输出. 哦,当然如果你不关心等待所有的任务,你可以只调用一次take(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 使用Apache POI将ResultSet转换为Excel(* .xlsx)表
- Android操作SQLite数据库
- 使用java在eclipse中显示与unicode的棋子
- java – android oreo上的永久服务
- java – ClassNotFoundException:org.dom4j.DocumentExcep
- Android读写文件的代码
- Java实现批量下载选中文件功能
- 尝试使用mockito和powermock模拟私有方法时获取java.lang.N
- java String hashcode缓存机制
- java 基础知识之网络通信(TCP通信、UDP通信、多播以及NIO)