首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >该方法的速度更快?线程或“oneline方法” - Java

该方法的速度更快?线程或“oneline方法” - Java
EN

Stack Overflow用户
提问于 2018-10-31 00:25:48
回答 1查看 0关注 0票数 0

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

方案一:

代码语言:javascript
复制
new Thread(() -> executeProgram(programs.get("progname"))).start();

方案二:

代码语言:javascript
复制
executeProgram(programs.get("progname.jar"));

“executeProgram”方法是这样的:

代码语言:javascript
复制
private void executeProgram(File program){
    try {
        new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
EN

回答 1

Stack Overflow用户

发布于 2018-10-31 10:07:04

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

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

但是#2,您在这里执行的具体任务是:

代码语言:javascript
复制
  new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档