I have a multi-threaded application where a thread sends a message to another thread. The waiting thread polls for the message and reacts (locks are handled). Like this:
Have you tried to put some Thread.sleep to avoid executing the while loop constantly? It will liberate CPU for your other threads and avoid hogs
http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html