请注意,我通常会在对该问题进行20次以上的搜索后再问一个问题。但是我还是听不懂。所以我需要你的帮助。
基本上,我不了解depot_id
newFixedThreadPool
是否意味着有十个不同的线程?还是意味着它可以有10个相同的线程?还是两者都有?
我使用newFixedThreadPool(10)
方法执行了20多次,并且可以正常工作。
submit()
是否打印值?还是您将线程放入submit()
中?
答案 0 :(得分:2)
简而言之,任务是可以并行执行的小代码单元(代码段)。执行线程的是线程(在线程池中)。您可以想到像工作者这样的线程,以及像工作这样的任务。工作可以并行完成,而工人可以并行工作。工人从事工作。
因此,回答您的问题:
newFixedThreadPool(int nThreads)
创建在相同输入队列上操作的nThread线程池。 nThreads是在任何给定时间可以运行的最大线程数。每个线程可以运行不同的任务。通过您的示例,您可以同时运行10个任务。 (可以通过{hovercraft-full-of-eles归功于here找到该文档)submit()
将给定的任务推入事件队列,该事件队列由线程池中的线程共享。一旦有线程可用,它将从队列的前面获取一个任务并执行它。它不应该打印任何内容,除非您传递的Runnable
中包含打印语句。但是,提交任务时,可能不会正确打印打印语句!一旦线程正在执行特定任务,它将打印。 (可以在here中找到文档)答案 1 :(得分:0)
仅参考java docs或JAVA API的描述,而不是对其进行谷歌搜索。 对于您的问题,我有以下评论。
问题1->
ExecutorService executorService = Executors.newFixedThreadPool(10);
首先,使用Executors newFixedThreadPool()工厂方法创建一个ExecutorService。这将创建一个包含10个执行任务的线程的线程池。
Executors.newFixedThreadPool API创建一个 重用 固定数量的线程的线程池,并且这些线程在无限制的无限队列中工作。 在任何时候,最多nThreads个线程都是活动的处理任务。 如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到某个线程可用为止。 如果在关闭之前执行过程中由于执行失败导致任何线程终止,则在执行后续任务时将使用新线程代替。直到显式关闭之前,池中的线程将一直存在。 甚至提交了20个任务后,它就与此线程池一起工作了。
内部调用下面的代码行。 公共静态ExecutorService newFixedThreadPool(int nThreads){ 返回新的ThreadPoolExecutor(nThreads,nThreads, 0L,TimeUnit.MILLISECONDS, 新的LinkedBlockingQueue()); }
问题2->提交一个Runnable任务以在Queue中执行,它还可以返回表示任务的Future Object类型的Object。我们可以使用Future的get方法检查提交的任务是否已成功完成,因为成功完成后它将返回null。