Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: Is `while (true) { ... }` loop in a thread bad? What's the alternative?

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.

like image 543
Mr. Burgundy Avatar asked Jul 29 '10 21:07

Mr. Burgundy


1 Answers

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

like image 102
JRL Avatar answered Sep 29 '22 06:09

JRL