sei*_*cle 10 java multiprocessing
我是一个使用Java在csv文件上进行数据处理的新手.为此,我使用Java(线程池)的多线程功能将csv文件批量导入Java,并在每个行上执行一些操作.在我的四核上,多线程可以大大加快这个过程.
我很想知道多处理如何/更加加速操作?如果是这样,是否有可用的教程?(Java Basic Tutorial提到了一个类,但是我不熟悉语法来自己理解这个类:
来自http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html:
Java虚拟机的大多数实现都作为单个进程运行.Java应用程序可以使用ProcessBuilder对象创建其他进程.多进程应用程序超出了本课程的范围[那时它们在哪里解释?].
我很好奇,知道多处理将/如何进一步加快操作速度?
不,实际上这可能会使情况变得更糟。如果要从多线程切换为多处理,则可以有效地多次启动JVM。启动JVM并非易事。实际上,台式机上JVM的启动方式与企业公司启动JVM的方式不同,只是为典型的最终用户减少了applet启动的等待时间。
在 Java 中有几种方法可以启动一个新进程:
ProcessBuilder.start()
Runtime.exec()
解决 ProcessBuilder
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;
Run Code Online (Sandbox Code Playgroud)
与Runtime
:
Runtime r = Runtime.getRuntime();
Process p = r.exec("firefox");
p.waitFor(10, TimeUnit.SECONDS);
p.destroy();
Run Code Online (Sandbox Code Playgroud)
使用 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);
Run Code Online (Sandbox Code Playgroud)
从多处理和多线程的主要区别此:
附加链接:
归档时间: |
|
查看次数: |
17179 次 |
最近记录: |