首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiThreading Vs ThreadPoolExecutor

MultiThreading Vs ThreadPoolExecutor
EN

Stack Overflow用户
提问于 2012-09-23 04:17:09
回答 5查看 13.7K关注 0票数 11

我已经在我写的许多应用程序中使用了多线程。在阅读更多内容时,我偶然发现了ThreadPoolExecutors。我不能不区分这两种情况。

我仍然理解的是,当我有一个任务时,我应该使用多线程,我想将一个任务分成多个小任务,以利用CPU并更快地完成工作。当我有一组任务,并且每个任务可以彼此独立运行时,使用ThreadPoolExecutor

如果我错了,请纠正我。谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-23 04:29:02

ThreadPoolExecutor只是一个高级接口,它使您可以在多个线程中运行任务,而不必处理低级Thread API。因此,区分多线程和ThreadPoolExecutor并没有什么实际意义。

ThreadPoolExecutor有很多种风格,但它们中的大多数都允许多个线程并行运行。通常,您将使用Executor ServiceExecutors工厂。

例如,ExecutorService executor = Executors.newFixedThreadPool(10);将在10个线程中运行您提交的任务。

票数 20
EN

Stack Overflow用户

发布于 2012-09-23 05:19:22

ThreadPoolExecutor是实现多线程的一种方式。它通常在以下情况下使用

  1. 具有不需要协调的独立操作(尽管没有什么可以阻止您进行协调,但您必须小心)
  2. 希望限制一次执行的操作的容量,并且(可选)如果池当前在所有线程中工作,则希望在执行操作时对操作进行排队。

Java7有另一个名为ForkJoinPool的内置类,它通常用于Map-Reduce类型操作。例如,可以想象使用ForkJoinPool实现合并排序,方法是在每个分叉点将数组拆分为1/2,等待结果,然后将结果合并在一起。

票数 10
EN

Stack Overflow用户

发布于 2012-09-23 05:17:41

线程池(执行器)是多线程的一种形式,特别是单生产者-多消费者模式的实现,在这种模式中,线程重复地将工作放入队列中,以供一组工作线程执行。它是使用常规线程实现的,并带来了几个好处:

  • 线程匿名性--您不需要显式地控制哪个线程做什么;只需启动任务,它们将由池处理。
  • 它封装了一个工作队列和线程团队-无需费心实现您自己的线程安全队列和循环threads.
  • load-balancing -因为工作人员在完成以前的任务时接受新任务,工作是均匀分布的,前提是有足够多的任务进行回收--只需在开始时创建单个池,并不断向其提供任务。不需要在每次需要完成工作时都启动和终止线程。

鉴于上述情况,池确实适用于通常相互独立且通常短暂的任务(长I/O操作只会占用池中的线程,而这些线程将无法执行其他任务)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12547381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档