[concurrency-interest] Is LinkedBlockingQueue.isEmpty() thread safe?
brian at quiotix.com
Sun Apr 22 14:28:44 EDT 2007
> I doubt if this query could be used in a concurrent program at all. I
> wonder if anyone can show a meaningful application of it. It is a mere
> YAGNI. I am afraid, the presence of the isEmpty() call and some other
> query method calls on a shared data structure indicate some
> incompetence in concurrent programming. It is a bad smell in a
> concurrent program, as they would call it in the refactoring arena.
To use your words...I think this statement merely reflects your
incompetence in your analysis of all the ways a concurrent class might
be intelligently used!
In that light, I offer a credible example: a single-producer,
multiple-consumer situation. Since the single producer is the only one
calling put(), having the producer call isEmpty() and receive "true"
would allow it to conclude "everything that's been put on the queue has
been processed, so it is safe to shut down now."
Why might you have only a single-producer? Perhaps that producer might
be the GUI event thread, queuing background tasks that would take too
long to execute in the GUI thread.
Please think a little more before you start using loaded words like
"incompetence". It is most unattractive, and, more importantly, makes
people unreceptive to your ideas -- even when they are sensible.
More information about the Concurrency-interest