java - 带有执行器的线程池的 POC(概念验证)

标签 java multithreading threadpool executors

谁能举例说明我们为什么要使用线程池。

我从理论上知道如何将线程池与执行器一起使用。

我看了很多教程,但我没有得到任何关于为什么我们应该使用线程池的实际例子,它可以是 newFixedThreadPool 或 newCachedThreadPool 或 newSingleThreadExecutor

在可扩展性和性能方面。

是否有人可以举例说明性能和可伸缩性方面的问题?

最佳答案

首先,检查一下我昨天写的关于线程池的描述:Android Thread Pool to manage multiple bluetooth handeling threads? (好的,这是关于 android 的,但对于经典的 java 也是一样的)。

我似乎总是发现使用线程池的主要用途是它可以很好地管理一个非常常见的问题:生产者-消费者。在这种模式中,有人需要不断地发送工作项(生产者)以供其他人(消费者)处理。工作项是从一些类似流的来源获得的,比如套接字、数据库或磁盘文件集合,需要多个工作人员才能有效处理。此处可识别的主要组件是:

  • 生产者:一个不断发布工作的线程
  • 发布作业的队列
  • 消费者:从队列中获取作业并执行它们的工作线程

除此之外,还需要使用同步来使所有这些工作正常进行,因为在没有同步的情况下读取和写入队列会导致数据损坏和不一致。此外,我们需要使系统高效,因为消费者不应在无事可做时浪费 CPU 周期。

现在这种模式很普遍,但是从头开始实现它需要相当大的努力,容易出错,需要仔细审查。

解决方案是线程池。它非常方便地管理工作队列、消费者线程和所有需要的同步。您需要做的就是扮演生产者的角色,并为池提供任务!

关于java - 带有执行器的线程池的 POC(概念验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717901/

相关文章:

java - 使用字符串生成器将 XML 放入单个 csv/xls 列中不起作用

java - 没有竞争条件 : Two blocks with different locks but same shared data

java - Java 中的线程池实际上 stop() 线程吗?

Java ForkJoin Future 似乎提前完成

java - 扫描文件中的重复字符串

java - 是否可以用不同长度的字符串重命名Java类?

java - 使用java中的线程计算列表中的数字总和

c# - ThreadPool的线程创建事件

java - 通过 Tomcat 上的 BIRT 报告查看器生成 BIRT 报告

c++ - 在没有 c++11 的情况下使用 boost 标记线程退出的正确方法是什么