有几种方法可以在Java中启动新进程:
ProcessBuilder.start()
-
Runtime.exec()
解决方法ProcessBuilder
-
Apache Commons Exec,可以解决
Runtime.exec()
跟:ProcessBuilder
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
File log = new File("log");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
跟:Runtime
Runtime r = Runtime.getRuntime();
Process p = r.exec("firefox");
p.waitFor(10, TimeUnit.SECONDS);
p.destroy();
使用Apache Commons Exec:
String line = "AcroRd32.exe /p /h " + file.getAbsolutePath();
CommandLine cmdLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);
多处理和多线程之间的主要区别如下:
- 多处理和多线程之间的主要区别在于,多处理允许系统将两个以上的CPU添加到系统中,而多线程允许进程生成多个线程以提高系统的计算速度。
- 多处理系统同时执行多个进程,而多线程系统允许同时执行进程的多个线程。
- 创建进程会耗费时间,甚至耗尽系统资源。但是,创建线程是经济的,因为属于同一进程的线程共享该进程的归属。
- 多处理可以分为对称多处理和非对称多处理,而多线程则没有进一步分类。
其他链接: