Other questions have focused on what the language says, wait and notify - but that doesn't look like what your question is about ... you are talking about mutexes, which are an implementation detail and therefore the JVM is specific.
So, we need to choose a JVM - let us choose openjdk (the source is available here ). The bit of code that (ultimately) handles all this is in hotspot/src/share/vm/runtime/objectMonitor.cpp .
It supports two data structures - a wait set and a record set. Waiting lines are added to the waiting set and parked, while threads trying to take the monitor are added to the record set and then parked. On notify stream is taken from the wait set and added to the record set. When a thread releases a lock, it discards the thread from the recordset, if any. Note that these sets are actually implemented as queues (linked lists), so they are processed based on FIFO.
Therefore, in this particular case, the implementation considers the wait on the object monitor and tries to make the object monitor the same way.
But this is just one implementation of one JVM (although others probably do something similar), so we cannot rely on it. So, I suppose, the question is, why do you want to know? If this is just curiosity then check out the openjdk code, this is fun. If you plan to use this information in your code ... do not do this.
UPDATE
I understand that saying βparkβ doesnβt tell us very much. The code that stores the stream is platform specific (and implemented in an object called PlatformEvent , which ParkEvent extends). In the openjdk version that I am looking at the linux park code can be found in hotspot/src/os/linux/vm/os_linux.cpp and this calls pthread_mutex_lock(_mutex) ... so in answer to your question yes a call may be required mutex on my car. Please note that there are many things that can happen above this, which may prevent us from reaching this point.
source share