我有一个运行速度非常快的方法。程序的速度并不重要,唯一重要的是调用下面代码的方法是否快。我有两个选择,第一个是我打开一个新线程,第二个是直接运行方法。
选项一:
new Thread(() -> executeProgram(programs.get("progname"))).start();
选项二:
executeProgram(programs.get("progname.jar"));
“executeProgram”方法是这样的:
private void executeProgram(File program){
try {
new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();
} catch (IOException e) {
e.printStackTrace();
}
}
最佳答案
创建一个新线程1来执行任务比只执行任务要慢。
但是,一般来说,在单独的线程上执行任务是质的不同。它允许当前线程做其他事情而不是等待任务完成。
但是 #2,您在这里执行的具体任务是:
new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();
启动外部进程来运行程序,并且不等待它完成。这不太可能阻塞相当长的时间2,因此在单独的线程中执行此操作几乎没有(如果有的话)优势。
1 - 使用现有线程(例如,通过由 ExecutorService
实例管理的线程池)会更快。但即便如此,尚不清楚这样做是否值得。
2 - 一位评论者指出,Process
不需要与启动它的线程异步运行。实际上,启动进程可能会阻塞线程或整个 JVM。这在具有多核的典型现代平台上是不太可能的。在单核平台上,启动第二个线程可能会导致第一个线程挂起……所以你仍然可能无法获得异步执行。
关于java - 该方法的速度更快吗?线程或 "oneline method"- Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52946455/