how to run the main thread after all child threads have completed there exceution

I have a requirement in which 28 threads have to complete some functionality. I have created these threads as in anonymous inner classes like :

Thread t=new Thread(new Runnable(){public void run() 
                        {//code
                        }}
                                );

                        t.start();

Now I want that the further execution should start after all these threads have finished there work.

Note : I am confused about join() method as it makes my threads run sequentially.

So can anyone suggest me how can I make main thread run once these threads are done with work.

Jon Skeet
people
quotationmark

Note : I am confused about join() method as it makes my threads run sequentially.

It will do that if you have code like this:

for (Runnable runnable : runnables) {
    Thread t = new Thread(runnable);
    t.start();
    t.join();
}

However, you can start all the threads you want to run in parallel, then call join on them all. For example:

List<Thread> threads = new ArrayList<>();
for (Runnable runnable : runnables) {
    Thread t = new Thread(runnable);
    t.start();
    threads.add(t);
}
// Now everything's running - join all the threads
for (Thread thread : threads) {
     thread.join();
}

// Now you can do whatever you need to after all the
// threads have finished.

There are many other approaches, of course - starting threads directly may well not be as suitable in your code as using a higher level abstraction; it depends on what you're trying to achieve. The above should work fine though - assuming all the Runnables are able to run in parallel without blocking each other through synchronization.

people

See more on this question at Stackoverflow