Question

I am working on a project that uses a queue that keeps information about the messages that need to be sent to remote hosts. In that case one thread is responsible for putting information into the queue and another thread is responsible for getting information from the queue and sending it. The 2nd thread needs to check the queue for the information periodically.

But later I found this is reinvention of the wheel :) I could use a blocking queue for this purpose.

What are the other advantages of using a blocking queue for the above application? (Ex : Performance, Modifiable of the code, Any special tricks etc )

Was it helpful?

Solution

The main advantage is that a BlockingQueue provides a correct, thread-safe implementation. Developers have implemented this feature themselves for years, but it is tricky to get right. Now the runtime has an implementation developed, reviewed, and maintained by concurrency experts.

The "blocking" nature of the queue has a couple of advantages. First, on adding elements, if the queue capacity is limited, memory consumption is limited as well. Also, if the queue consumers get too far behind producers, the producers are naturally throttled since they have to wait to add elements. When taking elements from the queue, the main advantage is simplicity; waiting forever is trivial, and correctly waiting for a specified time-out is only a little more complicated.

OTHER TIPS

They key thing you eliminate with the blocking queue is 'polling'. This is where you say

In that case the 2nd thread needs to check the queue for the information periodically.

This can be very inefficient - using much unnecessary CPU time. It can also introduce unneeded latencies.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top