| Christof Meerwald@java_sync.notes | ||||
Java SynchronisationEven tough monitors could rather trivially be mapped to mutexes and condition variables in Java, most of the work is handled internally and only a simple park/unpark interface (see PlatformEvent::park and PlatformEvent::unpark) is used to put threads into a sleeping state. Note: PlatformEvent::park maps onto pthread_cond_wait on Linux (and Solaris if you don't set UseLWPSynchronization - otherwise it maps to lwp_cond_wait) As might be expected, uncontended synchronisation is handled entirely in user-space. Contended SynchronisationWhen a monitor is contended, a simple synchronized block will be mapped to roughly (simplified) the following native code:
pthread_mutex_lock(&mutex);
while (locked) {
pthread_cond_wait(&cond, &mutex);
}
locked = 1;
pthread_mutex_unlock(&mutex);
// do something
pthread_mutex_lock(&mutex);
locked = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
notify/notifyAllTo avoid contention when waking up threads via notify or notifyAll, Java queues the thread(s) for wakeup when releasing the monitor (one at a time). Resources
| ||||
This Web page is licensed under the Creative Commons Attribution - NonCommercial - Share Alike License. Any use is subject to the Privacy Policy.
|
Revision: 1.2, cmeerw.org/notes/java_sync.html Last modified: Mon Sep 03 18:20:51 2018 |
Christof Meerwald <cmeerw@cmeerw.org> XMPP: cmeerw@cmeerw.org |