[concurrency-interest] Removing jobs from ThreadPoolExecutor
brian at quiotix.com
Fri Sep 2 12:46:32 EDT 2005
Let me see if I understand what you're doing:
- You have one executor
- It shares both high and low priority tasks
- You want to reap low-priority tasks if the queue hits some bound so
that you can make room for more high priority tasks
Are you using a PriorityBlockingQueue for the tasks? Is it bounded?
You might be able to do this with a custom BlockingQueue that derives
most of its functionality from PriorityBlockingQueue, but whose offer()
method kicks out old elements when the queue seems "too full". (To do
this, you'd have to iterate the queue; the PriorityBlockingDeque class
from JSR166x would make this easier, because you could just delete the
last element(s) to make some room.) Then you wouldn't need a separate
thread, because you'd intercept the offer() and only shed tasks when a
new high priority task shows up and there are already too many tasks on
Norman Elton wrote:
> I'm using a ThreadPoolExecutor to handle incoming jobs. Jobs are either
> "low priority" or "high priority". I have a separate thread that
> monitors the queue to ensure that it does not get out of control.
> I'd like for the monitoring thread to remove all low priority jobs if
> the queue gets above a certain size. Currently, I plan to loop through
> the queue, retrieved from ThreadPoolExecutor.getQueue(), and call
> ThreadPoolExecutor.remove() on all low priority jobs.
> Is this the best way to accomplish this? Will there be any concurrency
> issues here? It appears that if I remove a job that has already been
> executed, the method will simply return false.
> Thanks for any ideas,
> Concurrency-interest mailing list
> Concurrency-interest at altair.cs.oswego.edu
More information about the Concurrency-interest