新线程与重用线程

时间:2014-06-23 08:47:16

标签: java multithreading

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

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

3 个答案:

答案 0 :(得分:5)

无法重复使用Thread因为Thread一旦完成(退出run()方法),其Thread.StateThread.State.RUNNABLE传递到{{1}并且Thread类没有Thread.State.TERMINATED方法来设置其状态以重用它。

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

线程池的优势:

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

答案 1 :(得分:1)

JDK 1.5及以上版本,您应尽量不要创建Thread。

参考:http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html。尝试使用线程池执行器。

答案 2 :(得分:0)

重用线程具有以下优点:

  • 不需要创建新对象(线程对象)
  • 降低延迟,因为任务可以由现有空闲线程获取
  • 没有旧对象需要进行垃圾回收
  • 使用池还会引入并发运行线程的限制(平均负载峰值)