2014-06-23 30 views
1

我们有一个桌面应用程序,它具有一些后台线程,并且由于执行外部命令,还需要线程来处理out和err流。新线程与重用线程

我们可以创建新线程并让它们完成或者我们可以重用线程。重用线程会有一些好处,例如在性能或内存使用的情况下?

+2

定义“重用”的线程。一个线程只能启动一次。 – TheLostMind

+5

使用线程池。 – UmNyobe

+0

线程共享类的重用线程。线程池是很好的选择。 –

回答

2

没有办法重用Thread因为Thread一旦完成(退出run()法)及其Thread.State通行证从Thread.State.RUNNABLEThread.State.TERMINATED和线程类没有设置其状态重用它setState(Thread.State)方法。

但是我们可以帮助Java中的线程池。在线程池的情况下,创建一组固定大小的线程。线程池中的线程被拉出并由服务提供商分配作业。作业完成后,线程再次包含在线程池中。

利用线程池的:

  1. 线程池保存虚拟机的每一个短命的任务,创造全新的线程的工作。
  2. 它最大限度地减少了与启动线程并清理后死机相关的开销
  3. 通过创建线程池,池中的单个线程可以反复回收用于不同的任务。
  4. 减少响应时间,因为一个线程已建成和开工,只是在等待它的下一个任务
0

重用线程具有以下优势:

  • 没有新对象需要创建(Thread对象)
  • 更低的延迟,因为任务可以由现有的空闲线程
  • 没有被拾起旧对象需要垃圾回收
  • 使用池还引入了对并发运行线程的限制(平均出负载峰值)
+0

正在创建一个线程对象,比创建一个普通对象贵得多吗? –

+0

如果通过普通对象表示“new Object()”,那么是 - 只要看看Thread类的构造函数,以获得创建新线程时发生的事情的印象 –