什么是更快的方法?线程或“单一方法”-Java

约翰·杜(John Doe):

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

选项一:

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();
    }
}
斯蒂芬·C:

创建新线程1来执行任务比仅执行任务要慢。

但是,通常,在单独的线程上执行任务在质量上是不同的它允许当前线程执行其他操作,而不是等待任务完成。

但是,#2,您在此处执行的特定任务是:

  new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();

它启动一个外部进程来运行程序,而不等待它完成这不太可能在相当长的时间2内阻塞,因此在单独的线程中执行此操作几乎没有优势(如果有的话)。


1-使用现有线程(例如,通过ExecutorService实例管理的线程池)将更快。但是即使这样,仍不清楚是否值得为此付出努力。

2-评论者指出,Process不需要a 与启动它的线程异步运行。实际上,启动进程可能会阻塞线程或整个JVM。在具有多个内核的典型现代平台上,这是不太可能的。在具有单核的平台上,启动第二个线程可能会导致第一个线程挂起……因此您仍然可能无法获得异步执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

何时在Java中使用单一方法接口

设计问题:单一方法的Java类可以吗?

java8:来自另一方法参考的方法参考

从含有不同的类中调用一方法图形克[JAVA]

servlet是编写Java Web应用程序的唯一方法吗

:gen-class是在Clojure中扩展Java类的唯一方法吗?

Java如何在同一方法中使用XMLStreamReader和XMLStreamWriter

单一方法上课-最佳方法?

单一方法中的多个等待

单一方法类与接口实现

单一方法克隆派生类型

使用遮罩合并图像的单一方法

这是教Java框架有关Windows的Aero Snap功能的唯一方法吗?

如何在Java中永久运行程序?是System.in.read()的唯一方法吗?

如何使用Java在同一方法中使用不同的字符串值更新变量?

如何为同一方法传递不同的对象类型,而不是在Java中编写具有相同功能和返回类型的两个方法

是否有一种从Enumeration对象创建Collection的单一方法?

匿名和授权用户的Spring @RestController单一方法

使用单一方法从多个输入字段计算年龄

针对复杂类型的单一方法的C ++模板专业化

可能通过单一方法返回不同类型的对象

使用哪种单一方法检查:空白?&& !错误的?

Python中单一方法的性能衡量技术之间的差异

运行时反射-使用单一方法提取符号

Angular.js中Ajax单一方法的体系结构

maven-surefire-plugin 运行单一方法,但在课堂上失败

使用单一方法检测按钮阵列上的点击

单一方法可产生多个新的Scanner返回

通过单一方法但使用多个查询的数据库连接