Is while (true) { ... }
loop in threads bad? What's the alternative?
Update; what I'm trying to to...
I have ~10,000 threads, each consuming messages from their private queues. I have one thread that's producing messages one by one and putting them in the correct consumer's queue. Each consumer thread loops indefinitely, checking for a message to appear in their queue and process it.
Inside Consumer.java:
@Override public void run() { while (true) { Message msg = messageQueue.poll(); if (msg != null) { ... // do something with the message } } }
The Producer is putting messages inside Consumer message queues at a rapid pace (several million messages per second). Consumers should process these messages as fast as possible!
Note: the while (true) { ... }
is terminated by a KILL message sent by the Producer as its last message. However, my question is about the proper way to do this message-passing...
Please see the new question, regarding this design.
Instead of looping forever and breaking or returning, you might choose to check the interrupted status.
while (!Thread.currentThread().isInterrupted()) { try { doWork(); wait(1000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } }
If your threads are tasks managed by an ExecutorService, you can have them all end gracefully simply by calling shutdownNow().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With