so what are all these started threats doing:
Add some println() statements with appropriate contents to show what the threads are doing.
You have one that shows when the loop has ended.
The do {} while loops will continually test for the exit condition until it allows the flow to exit the loop. There better ways to wait for a condition to be set that spinning in a loop.
When a thread ends the run() method is exited.