Thread and program flow control

I have a program that starts a bunch of threads after init.  The main program will pause its execution, and waits for the threads to finish.  Now, I can only think of a pooling loop to syn the program flow.  Is there a better way to avoid this busy pooling loop?

public class ThreadTest {
  public static void main(String[] args) {
    Thread[] dummies = new Thread[100];
    for(int i=0; i<100; i++)
      dummies[i] = new Thread(new DummyThread());

    for(int i=0; i<100; i++)

//== Is there a better way to replace this pooling loop? ==
    boolean done = false;
    while(!done) {
      done = true;
      for(int i=0; i<100; i++) {      
        if(dummies[i].isAlive()) {
        done = false;      

class DummyThread implements Runnable {
  private static int threadCount=0;
  private int threadID=++threadCount;

  public void run() {
    for(int i=0; i<10; i++) {
      System.out.println ("Thread ID:" + threadID + "\t" + i);
Who is Participating?
imladrisConnect With a Mentor Commented:
An alternative to a polling loop would be to use the join method. This method will block the caller until the thread finishes. So then you would get:

for(i=0; i<100; ++i)dummies[i].join();

One way or another, I believe that you'll have to check to see if the threads are still alive.  If you know that each thread is going be terminated smoothly (ie. it won't be killed by another thread) then you can have an array of booleans.  Each thread would initialize it's member in the array to true when the thread starts, and would set it to false when it finished.  This way you wouldn't have to poll the threads, but would be able to poll the array instead.  Make this array an instance variable so that all threads can access it.
Good luck!

Laminamia :)
joey9394Author Commented:

Thanks a lot!!  

By the way, in my DummyThread class, do I need to put the threadID=++threadCount in a synchornized method, or it is ok now?

Many thanks.
Yes. Access to any "global" variable needs to be guarded by synchronized access.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.