java - 该方法的速度更快吗?线程或 "oneline method"- Java

标签 java multithreading methods

我有一个运行速度非常快的方法。程序的速度并不重要,唯一重要的是调用下面代码的方法是否快。我有两个选择,第一个是我打开一个新线程,第二个是直接运行方法。

选项一:

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/

相关文章:

java - 从另一个线程中的对象运行方法

java - 如何让一个servlet响应多个请求?

java - 通过套接字将 String 和 Byte[] 从 Android 应用程序发送到 Python 服务器

c# - Interlocked 用于递增/模拟 bool 值,这安全吗?

multithreading - C++/CLI线程同步,包括托管和非托管代码

java - 将 double 变量从一种方法传递到另一种方法

在 Raku 中测试私有(private)方法

Java方法和调用方法太多次

java - Kotlin : how to Convert String with HTML numbers to String without HTML numbers

java - WebSphere 7 中通过 JNDI 的应用程序和模块名称