每个Java对象(及其类)都有一个关联的监视器。用pthread术语,Java监视器等效于可重入互斥体和条件变量的组合。
对于锁定,Win32 API提供了Mutex对象(可重入但重量级)和关键节(不可重入但轻量级)。它还提供了其他同步结构,例如信号量和事件,但没有条件变量的明确概念。
如果我正在编写JVM,如何使用这些Win32概念来实现Java监视器?
Windows具有SignalObjectAndWait(),可像在监视器中等待条件变量一样使用。您可以使用一个事件(即Reset)和一个互斥对象,然后使用PulseEvent()等效于用信号发送条件变量。
我建议您看一下OpenJDK源,以了解如何实现ReentrantLock类。
((我自己没有检查过,所以我不确定答案)。
util.concurrent锁是使用本机API实现的。
我建议您看看OpenJDK源代码,以了解如何实现ReentrantLock类。