Java - Thread join
In this code, what does the two joins and break mean?
t1.join()
causes t2
to stop until t1
terminates?Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread t2 = new Thread(new EventThread("e2"));
t2.start();
while (true) {
try {
t1.join();
t2.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
There is a thread that is running your example code which is probably the main thread.
- The main thread creates and starts the
t1
and t2
threads. The two threads start running in parallel.
- The main thread calls
t1.join()
to wait for the t1
thread to finish.
- The
t1
thread completes and the t1.join()
method returns in the main thread.
- The main thread calls
t2.join()
to wait for the t2
thread to finish.
- The
t2
thread completes (or completed before the t1
thread did) and the t2.join()
method returns in the main thread.
It is important to understand that the t1
and t2
threads have been running in parallel but the main thread that started them needs to wait for them to finish before it can continue. That's a common pattern. Also, t1
and/or t2
could have finished before the main thread calls join()
on them. If so then join()
will not wait but will return immediately.
t1.join()
means cause t2 to stop until t1 terminates?
No. The main thread that is calling t1.join()
will stop running and wait for the t1
thread to finish. The t2
thread is running in parallel and is not affected by t1
or the t1.join()
call at all.
In terms of the try/catch, the join()
throws InterruptedException
meaning that the main thread that is calling join()
may itself be interrupted by another thread.
Comments
Post a Comment