【发布时间】:2015-01-29 19:39:38
【问题描述】:
我在理解执行程序服务的固定线程池的工作时遇到了概念问题。
假设我有一个由 n 个线程组成的固定池线程,并且我正在向该服务提交多个任务。现在,如果有一个工作线程可用,它会执行提交的任务,其他提交的任务会在队列中等待,直到有一个工作线程空闲。
我的问题是,我们什么时候将工作线程视为空闲工作线程?
我们是否无论任务是否完成,只要启动提交的任务,就认为工作线程空闲,或者只要提交的任务正在进行,我们就认为工作线程忙。
假设我们在池中有一个工作线程 W1 和一个任务 Op1被提交给执行者。
W1 在时间 T1 启动 Op1,一段时间后 Op1 在时间 T3 完成执行。这里 T3 > T1
现在,我们是认为 W1 在 T1 启动 Op1 时立即空闲,还是认为它很忙,在 T3 时空闲。
提前致谢!!
【问题讨论】:
-
“我们是否认为工作线程一开始提交任务就空闲”为什么我们要这样定义?
-
一个工作线程在它能够工作时被认为是“空闲的”(即它当前没有执行任务)。
-
所有工作线程都是天生免费的! ;-)
-
还有一点,在 ScheduledExecutorService 的情况下,任务重复运行(根据其定义的频率)。任何空闲的工作人员都可以在任何迭代中选择这个计划任务。不是吗?
标签: java multithreading executorservice