I have a logging code which needs to be executed after all Threads
s are executed.
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.run();
t2.run();
doLogging();
Is there any way to execute doLogging()
only after both threads are done with their processing. Now that doLogging()
is called as soon as t1 and t2 are started.
Just join()
all threads before your doLogging()
call:
t1.join();
t2.join();
// the following line will be executed when both threads are done
doLogging();
Note that the order of join()
calls doesn't matter if you want to wait for all of your threads.
In addition to the join() solution there is also something called CountDownLatch in the java.util.concurrent library. It allows you to initialize it to a certain number and then wait until it was hit the specified number of times.
Simple example:
CountDownLatch latch = new CountDownLatch(NUMBER_OF_THREADS);
for(int i=0; i<NUMBER_OF_THREADS;i++)
new Thread(myCode).start();
latch.await();
The latch must be explicitly hit by the worker threads for this to work though:
latch.countDown()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With