【问题标题】:Difference between Thread and Threadpool线程和线程池的区别
【发布时间】:2011-09-29 09:29:45
【问题描述】:

任何人都可以通过有关 Thread 和 ThreadPool 的示例来指导我,它们之间有什么区别?哪个最好用...?它的缺点是什么

【问题讨论】:

  • 你看here了吗?

标签: java multithreading thread-safety threadpool


【解决方案1】:

由于一个线程只能运行一次,因此您必须为每个任务使用一个线程。但是,创建和启动线程有点昂贵,并且可能导致太多线程等待执行的情况(现在不记得确切的名称) - 这会进一步降低性能。

线程池 - 顾名思义 - 一个始终运行的工作线程池。然后这些线程通常从列表中获取任务,执行它们,然后尝试获取下一个任务。如果没有任务,线程将等待。

使用线程池有几个优点:

  • 您不必为每个任务创建一个线程
  • 您的系统通常拥有最佳线程数(也取决于 JVM)
  • 您可以专注于编写任务并使用线程池来管理基础架构

编辑:这里有一些关于并发的非常好的文章:Sutter's Mill,查看底部的更多链接。尽管它们主要是为 C/C++ 编写的,但一般概念是相同的,因为它还描述了并发解决方案和硬件之间的相互依赖关系。了解并发性能问题的好文章是this article on drdobbs.com

【讨论】:

  • 感谢它的清晰易懂..你能举个简单的例子来指导我吗
  • “太多线程正在等待执行(现在不记得确切的名称了)”。您正在寻找的术语是“饥饿”吗?
  • @Oltatur starvation 是这种情况的症状,因为这意味着线程无法获得所需的资源(如 CPU 时间)。 oversubscription 似乎是我正在寻找的术语。
【解决方案2】:

线程池是分配给执行统一任务的线程的集合。 使用线程池模式的优点是您可以定义允许同时执行的线程数。这是为了避免由于高 CPU 负载或内存不足而导致服务器崩溃,例如服务器的硬件容量最多只能支持每秒 100 个请求。

数据库池的概念与线程池类似。

这种模式在大部分后端服务器的应用流程中被广泛使用。

线程是一个执行任务的单元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2010-11-06
    • 2019-12-29
    • 2012-12-18
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多