Both of wait() and join() methods when called by thread-1 on thread-2 makes thread-1 wait for the thread-2, either for sometime or till thread-2 completes.
If we are using the overloaded versions of these methods i.e. wait(long timeout) and join(long millis), then
In case of wait(long timeout), thread-1 will become runnable either by notify (or notifyall) or even timeout occurs (whichever is first).
In case of join(long millis), thread-2 will become runnable either when thread-2 completes or timeout occurs (whichever is first).
So then what is the difference between these two implementations?
Some that I thought are these :-
- For wait(), we need to have the lock on the object we are waiting on. For join() these are not necessary.
- After executing wait(), the thread removes lock it obtained and re-gains the lock once it becomes running again. But what about join? Does a thread removes a lock after executing join if this was executed from a synchronized block (or method)?