首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于Java ExecutorService newFixedThreadPool的几个问题

关于Java ExecutorService newFixedThreadPool的几个问题
EN

Stack Overflow用户
提问于 2018-08-27 03:05:05
回答 2查看 100关注 0票数 0

请注意,我通常会在关于这个问题的谷歌搜索超过20次后提出一个问题。但我还是不能理解。所以我需要你的帮助。

基本上,我不了解newFixedThreadPool的确切用法

  1. newFixedThreadPool(10)是不是意味着有十个不同的线程?或者这是否意味着它可以有10个相同的线程?还是两者兼而有之?我用submit()方法执行了20多次,它是有效的。
  2. submit()会打印值吗?还是将线程放在ExecutorService

中?

EN

回答 2

Stack Overflow用户

发布于 2018-08-27 04:35:03

简而言之,任务是可以并行执行的小代码单元(代码段)。线程(在线程池中)是执行它们的线程。你可以把线程想象成工作者,把任务想象成作业。工作可以并行完成,工人可以并行工作。工人在工作中工作。

所以,为了回答你的问题:

  1. newFixedThreadPool(int nThreads)创建在同一输入队列上操作的nThread线程的线程池。nThreads是在任何给定时间可以运行的最大线程数。每个线程可以运行不同的任务。在您的示例中,您可以同时运行多达10个任务。(文档可以在@hovercraft- here -of-eels中找到)
  2. submit()将给定任务推送到由线程池中的线程共享的事件队列中。一旦线程可用,它将从队列的前面获取一个任务并执行它。它不应该打印任何东西,除非您传递给它的Runnable中有一条print语句。但是,提交任务时可能无法正确打印打印语句!一旦线程执行该特定任务,它就会打印出来。(文档可以在here)

中找到

票数 2
EN

Stack Overflow用户

发布于 2018-10-24 13:52:41

只需参考java文档或JAVA API的描述,而不是在googling上搜索它。对于你的问题,我有下面的评论。

问题1 ->

ExecutorService executorService = Executors.newFixedThreadPool(10);

首先,使用Executors newFixedThreadPool()工厂方法创建一个ExecutorService。这将创建一个包含10个线程执行任务的线程池。

Executors.newFixedThreadPool应用程序接口创建一个线程池,重用固定数量的线程,这些线程在s*共享无界队列*上工作。在任何时候,至多nThreads线程都将是活动的处理任务。如果在所有线程都处于活动状态时提交其他任务,则它们将在队列中等待,直到有线程可用为止。如果任何线程在关机前的执行过程中由于失败而终止,如果需要执行后续任务,则会有一个新线程取而代之。池中的线程将一直存在,直到它被显式关闭。在提交了20个任务之后,它使用了这个线程池。

在内部它调用下面的代码行。返回公共静态ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue());}

问题2- >提交一个可运行的任务以便在队列中执行,它也可以返回一个表示任务的Future对象类型的对象。我们可以使用Future的get方法来检查提交的任务是否成功完成,因为如果成功完成,它将返回null。

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

https://stackoverflow.com/questions/52029421

复制
相关文章

相似问题

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