3

在没有 Java Executors 的生活中,必须为每个 Runnable 任务创建新线程。创建新线程需要线程开销(创建和拆除),这会增加非执行程序程序的复杂性和浪费时间。

参考代码:

没有 Java 执行器 -

new Thread (aRunnableObject).start ();

使用 Java 执行器 -

Executor executor = some Executor factory method;
exector.execute (aRunnable);

底线是 Executors 抽象了如何管理线程的低级细节。

真的吗?

谢谢。

4

3 回答 3

11

底线是 Executors 抽象了如何管理线程的低级细节。真的吗?

是的。

它们处理诸如创建线程对象、维护线程池、控制正在运行的线程数量以及优雅/不那么优雅的关闭等问题。手工完成这些事情并非易事。

编辑

执行此操作可能会或可能不会影响性能...与完美调整到您的应用程序的精确需求的自定义实现相比。但机会是:

  1. 您的自定义实现不会完美调整,并且
  2. 无论如何,性能差异不会很大。

此外,如果有需要解决的问题,Executor 支持类允许您简单地调整各种参数(例如线程池大小)。我看不出垃圾收集开销会如何通过使用 Executors 受到显着影响,一种或另一种方式。

作为一般规则,您应该专注于简单而健壮地编写应用程序(例如,使用高级并发支持类),并且只在以下情况下担心性能:

  1. 您的应用程序运行“太慢”,并且
  2. 分析工具会告诉您在特定区域遇到问题。
于 2010-08-11T00:27:52.947 回答
1

执行程序相对于普通线程的几个好处。

  1. 通过改变 ThreadPools 的大小可以轻松实现节流。这有助于控制/检查流经应用程序的线程数。在对您的负载应用进行基准测试时特别有用。
  2. 使用 RejectionHandlers 可以更好地管理 Runnable 任务。
于 2010-08-11T07:15:56.857 回答
0

我认为 executor 所做的只是他们将为您执行低级别的任务,但您仍然必须明智地决定您想要哪个线程池。我的意思是,如果您的用例最多需要 5 个线程并且您使用具有 100 个线程的线程池,那么它肯定会对性能产生影响。除此之外,还有一些额外的工作在低级别完成,这将停止系统。最后,最好先了解底层正在做什么,这样才能让我们对地下事物有一个公平的认识。

于 2013-08-25T17:26:34.957 回答