我想调一个线程,其执行以下操作:的ThreadPoolExecutor - ArrayBlockingQueue ...等待它删除的元素之前形成队列
线程池只有1线程[CorePoolSize =0, maxPoolSize = 1]
队列使用是一个ArrayBlockingQueue
Quesize = 20
背景:
线程尝试读取请求并对其执行操作。然而,最终的请求增加了很多,线程总是很忙,并且消耗1个CPU,这使得它成为一个资源管理器。
我想这样做,而是在间隔中对请求进行采样并处理它们。其他请求可以安全地忽略。
我所要做的就是在“操作”函数中进行睡眠,以便线程每次睡眠一段时间并释放CPU。
Quesiton:
不过,我想知道是否有使用基本上自身休眠它读取下一个元素之前的某个时候队列的方式。这将是理想的,因为在执行过程中休眠任务并保持执行不完整对我来说听起来并不合适。
请让我知道如果您有任何其他建议以及对任务
感谢。
编辑: 我添加了一个后续问题here 纠正maxpool大小为1 [写在一个急速] ..感谢蒂姆指出。
这不是一个真正的“资源猪”,有很多工作要做。你真的想要人为地减缓请求吗?为什么请求(客户端?)发送得比他们可以处理的速度快?这是不可持续的。 – AngerClown 2010-10-05 00:19:26
好点。如果客户发出很多因完整队列而被拒绝的请求,那么他们正在浪费可能在客户端和执行程序之间更好地平衡的CPU。队列是一个缓冲区,可以随时间“平滑”负载;拒绝应该是罕见的,不是常规的。 – erickson 2010-10-05 00:27:23
客户不是真正意义上的请求者的专用客户端。请求者有一个专用客户端,根据请求的数量进行扩展。我正在工作的客户端就像是一个额外的日志记录工具,监控操作类型..采样仍然很好,以获取请求图片..希望是有道理的。 – codeObserver 2010-10-05 00:55:44