Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Thread and program flow control

Posted on 2000-05-15
4
147 Views
Last Modified: 2010-04-01
/*
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++)
      dummies[i].start();

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

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);
      Thread.yield();
    }
  }
}
0
Comment
Question by:joey9394
  • 2
4 Comments
 
LVL 3

Expert Comment

by:Laminamia063099
ID: 2811253
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 :)
0
 
LVL 16

Accepted Solution

by:
imladris earned 50 total points
ID: 2811324
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();


0
 

Author Comment

by:joey9394
ID: 2811627
imladris,

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.
0
 
LVL 16

Expert Comment

by:imladris
ID: 2811718
Yes. Access to any "global" variable needs to be guarded by synchronized access.
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
servlet example 11 49
Java string replace 11 54
Adding multiple JVM environments to RedHat 6 7 47
Java Eclipse Loop 3 20
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
The viewer will learn how to implement Singleton Design Pattern in Java.

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question