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().