当前位置: 首页 > 面试题库 >

执行者相对于新线程的优势

商弘义
2023-03-14
问题内容

使用Executors而不是Java程序中的Thread有什么好处。

ExecutorService pool = Executors.newFixedThreadPool(2);
void someMethod() {
    //Thread
    new Thread(new SomeRunnable()).start();

    //vs

    //Executor
    pool.execute(new SomeRunnable());
}

执行程序是否只是限制它允许一次运行的线程数(线程池)?它是否实际上将可运行对象多路复用到它创建的线程上?如果不是,那只是避免每次都必须写新的Thread(runnable).start()的一种方法?


问题答案:

是的,执行程序通常会将可运行对象多路复用到他们创建的线程上;他们将约束和管理一次运行的线程数;它们将使自定义并发级别变得容易得多。通常,执行者应该比仅创建裸线程更受青睐。



 类似资料:
  • 我使用线程池执行器,将其替换为旧版线程。 我创建了如下执行器: 这里的核心大小是maxpoolsize/5。我已经在应用程序启动时预先启动了所有核心线程,大约160个线程。 在传统设计中,我们创建并启动了大约670个线程。 但关键是,即使在使用Executor并创建和替换遗留设计之后,我们也不会得到更好的结果。 对于结果内存管理,我们使用Top命令来查看内存使用情况。对于时间,我们将System.

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 与MySQL相比,使用MySQLi有什么优势? 问题答案: 见文档: PHP的mysqli扩展是什么? mysqli扩展或MySQL改进的扩展是为了利用MySQ

  • 我确信这两个列表都不是空的,并且正在调用,但是没有调用order execution run方法....

  • 问题内容: 在我的烧瓶应用程序中,我每次启动时都会重新创建一个sqlite数据库。 为此,我使用官方网页上显示的代码 我的项目结构如下所示 现在我的StubbyServer.py包含: 如果我的工作目录是命令运行正常 如果我的工作目录是命令,则失败并显示: 在get_db中的文件“ app / StubbyServer.py”中,第43行 带有open(’ schema.sql ‘,mode =’

  • 问题内容: 我按以下顺序设置了线程的优先级 先是A然后是B,然后是C。但是当我在下面的程序中运行时,有时B在A之前运行。我不理解这种执行方式,因为我将B的优先级设置为小于A的优先级。 } 问题答案: 线程优先级可能不是您认为的那样。 线程的优先级是对操作系统的建议,在涉及这两个线程的任何调度或CPU分配决策点中,一个线程优先于另一个线程。但是,如何实现这一点取决于操作系统和JVM的实现。 Java

  • 问题内容: 如果我在同步块内创建一个新线程,该块是否将保持锁定状态,直到线程执行完成为止?如果没有,那么直到什么时候才能保持锁定状态? 问题答案: 如果代码d具有新创建的线程,则它将保持锁定,从而等待它完成。由于没有锁,因此在调用完成后将不释放锁定。