请注意,我通常会在针对该问题进行 20 多次谷歌搜索后提出问题。但我还是无法理解。所以我需要你的帮助。
基本上我不明白newFixedThreadPool
的具体用法
newFixedThreadPool(10)
是否意味着有十个不同的线程?或者这是否意味着它可以有 10 个相同的线程?或者两者都有? 我使用submit()
方法执行了 20 多次,并且有效。submit()
是否打印一个值?或者您是否将线程放入ExecutorService
中?
最佳答案
简单来说,任务是可以并行执行的小代码单元(代码段)。线程(在线程池中)是执行它们的东西。您可以将线程视为 worker ,将任务视为工作。工作可以并行完成, worker 也可以并行工作。 worker 们在工作中工作。
那么,回答你的问题:
newFixedThreadPool(int nThreads)
创建在同一输入队列上运行的 nThread 线程的线程池。 nThreads 是在任何给定时间可以运行的最大线程数。每个线程可以运行不同的任务。在您的示例中,您最多可以同时运行 10 个任务。 (该文档可以在 here 找到,感谢 @hovercraft-full-of-eels)submit()
将给定任务推送到由线程池中的线程共享的事件队列中。一旦线程可用,它就会从队列前面取出一个任务并执行它。它不应该打印任何内容,除非您传递给它的 Runnable 中包含打印语句。但是,当您提交任务时,打印语句可能无法正确打印!一旦线程执行该特定任务,它将打印。 (文档可以在 here 找到)
关于java - 关于Java ExecutorService newFixedThreadPool的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52029421/