
waitset
等待队列,在java9 中是objectMonitor的一个内部类;
具体构造函数如下:
ObjectWaiter::ObjectWaiter(Thread* thread) {
_next = NULL;
_prev = NULL;
_notified = 0;
TState = TS_RUN;
_thread = thread;
_event = thread->_ParkEvent;
_active = false;
assert(_event != NULL, "invariant");
}
- 双端队列
- notified 标志位是0
- TState是TS_RUN
- active标志位
waitSet由waitObject构成;
入栈操作
前提:一个 POJO A != null;
在没有获取A的对象锁的前提下直接调用 A.wait() 将会抛出一个IllegalMonitorException,内部的检查逻辑也在这个cpp文件中,是一个宏指令:
#define CHECK_OWNER()
do {
if (THREAD != _owner) {
if (THREAD->is_lock_owned((address) _owner)) {
_owner = THREAD; /* Convert from basiclock addr to Thread addr */
_recursions = 0;
} else {
TEVENT(Throw IMSX);
THROW(vmSymbols::java_lang_IllegalMonitorStateException());
}
}
} while (false)




近期评论