不知道為什么網上看到的介紹都說synchronized的重量級鎖底層依賴的是mutex lock,會有用戶態和內核態的切換,但實際上看jvm hotspot原始碼根本沒有用到mutex lock啊
加鎖:
int ObjectMonitor::TryLock (Thread * Self) {
for (;;) {
void * own = _owner ;
if (own != NULL) return 0 ;//如果有執行緒還擁有著重量級鎖,退出
//CAS操作將_owner修改為當前執行緒,操作成功return>0
if (Atomic::cmpxchg_ptr (Self, &_owner, NULL) == NULL) {
return 1 ;
}
//CAS更新失敗return<0
if (true) return -1 ;
}
}沒有競爭到鎖的執行緒會掛起,這部分確實有內核態的切換,但絕對不是使用到了mutex lock
不知道我的理解對不對求助各位大神
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258262.html
標籤:Java相關
