线程池像任何ExecutorServices一样,我们定义了一个大小为3的newFixedPool.现在我有一个大约10000个可运行任务的队列.
为了执行上述过程,我有这些疑虑 –
>要执行上述过程,执行程序是否只允许任务中的3个线程一次运行?
> Pool将携带3个Threads,这3个线程只负责执行所有10000个任务.如果它是正确的,单个线程如何运行不同的可运行任务,因为最终这些任务也是线程本身,并且在运行任何作业/任务的过程中,您可以为池线程分配新的职责.
解决方法:
>是的,如果实际上你正在使用Executors.newFixedThreadPool(3),那么一次最多只有3个线程会在池中.
> 10,000个任务不是线程,它们只是Runnables.线程必须通过Thread#start启动才能实际创建系统线程.任务(Runnable的实例)放在BlockingQueue中.线程池中的线程将轮询BlockingQueue以运行任务.当他们完成任务时,他们返回队列以获得另一个任务.如果添加了更多任务,则根据该队列的实现规则将它们插入到BlockingQueue中.对于大多数队列来说,这是先进先出,但是PriorityQueue实际上使用比较器或自然排序来在插入任务时对其进行排序.