Another way to reduce the number of messages is to use the Hamburger Pattern. Instead of separately sending the beef, the salad, the onion and the lettuce, why not send a complete hamburger at once? Imagine you are sending coordinates through the network. If you have two messages in your queue, one updating X, and another updating Y, you can merge both messages into one sending both coordinate changes at the same time. In the same way, if you have two messages, both updating X, you can also decide to merge them, sending only the second update.
This is more difficult than filtering, since you need to have access to your message queue and be able to remove items from the middle. The default implementation of Thread Pools in Java uses queues that are optimized for adding at the end and removing from the front. Here, you will clearly need a different implementation.
public class Display {public void run() {while (true) { Data data = queue.getNextMergeValue(); show(data); } } }
After you filtered and merged all your data, you might end up running into the Water Drop Anti-Pattern. Next time!