1. 程式人生 > >synchronized的底層JVM實現機制

synchronized的底層JVM實現機制

Java synchronized 包含兩方面的含義

互斥
JVM 通過物件鎖來實現互斥:
typedef struct object {
uintptr_t lock;
Class *class;
} Object
協作
協作是通過 Object wait, notify/notifyAll 方法實現的。

對應到JVM 的底層術語,這一機制叫做 monitor:
typedef struct monitor {
pthread_mutex_t lock;
Thread *owner;
Object *obj;
int count;
int in_wait;
uintptr_t entering;
int wait_count;
Thread *wait_set;
struct monitor *next;
} Monitor;


在不同區域的 Thread 對應的狀態(Java Thread 的狀態圖):

在底層的JVM 或許會有更多的狀態,但是,暴露在 Java Thread 的狀態是在 java.lang.Thread 中定義的,注意 JDK 6 修訂了 interrupt 的語義。

比如,在底層,進行獲取 lock 動作到獲得 lock 之間有一小段狀態叫做 BLOCKED:

void monitorLock(Monitor *mon, Thread *self) {
if(mon->owner == self)
mon->count++;
else {
if(pthread_mutex_trylock(&mon->lock)) {
disableSuspend(self);

self->blocked_mon = mon;
self->blocked_count++;
self->state = BLOCKED;

pthread_mutex_lock(&mon->lock);

self->state = RUNNING;
self->blocked_mon = NULL;

enableSuspend(self);
}
mon->owner = self;
}
}

相關推薦

synchronized底層JVM實現機制

Java synchronized 包含兩方面的含義互斥JVM 通過物件鎖來實現互斥:typedef struct object { uintptr_t lock; Class *class; } Object協作協作是通過 Object wait, notify/noti

STL及一些容器底層實現機制

失效 list容器 容量 較高的 浪費 復制 處理 跳轉 strong 1、vector容器 vector的數據安排以及操作方式,與數組類似。倆這唯一的區別就是空間的運用靈活性。數組是靜態空間,一旦配置了就不能改變,vector是動態數組。在堆上分配內存。vector是動態

synchronized底層實現原理

進入時:monitorenter 每個物件有一個監視器鎖(monitor)。當monitor被佔用時就會處於鎖定狀態,執行緒執行monitorenter指令時嘗試獲取monitor的所有權,過程如下:1、如果monitor的進入數為0,則該執行緒進入monitor,然後將進入數設定為1,該執行緒即為moni

objective-c程式碼轉c++程式碼,瞭解底層實現機制

1、開啟終端,輸入    clang -rewrite-objc main.m   2、有時會遇到找不到系統庫的標頭檔案,如   解決辦法:   指定模擬器: xcrun -sdk iphonesimulator

死磕Synchronized底層實現--概論

關於synchronized的底層實現,網上有很多文章了。但是很多文章要麼作者根本沒看程式碼,僅僅是根據網上其他文章總結、照搬而成,難免有些錯誤;要麼很多點都是一筆帶過,對於為什麼這樣實現沒有一個說法,讓像我這樣的讀者意猶未盡。 更多文章見個人部落格:github.com/farmerjohng… 本系列

死磕Synchronized底層實現--偏向鎖

本文為synchronized系列第二篇。主要內容為分析偏向鎖的實現。 偏向鎖的誕生背景和基本原理在上文中已經講過了,強烈建議在有看過上篇文章的基礎下閱讀本文。 更多文章見個人部落格:github.com/farmerjohng… 本文將分為幾塊內容: 1.偏向鎖的入口 2.偏向鎖的獲取流程 3.

死磕Synchronized底層實現--輕量級鎖

本文為死磕Synchronized底層實現第三篇文章,內容為輕量級鎖實現。 輕量級鎖並不複雜,其中很多內容在偏向鎖一文中已提及過,與本文內容會有部分重疊。 另外輕量級鎖的背景和基本流程在概論中已有講解。強烈建議在看過兩篇文章的基礎下閱讀本文。 本系列文章將對HotSpot的synchronized鎖實現

死磕Synchronized底層實現--重量級鎖

本文為死磕Synchronized底層實現第三篇文章,內容為重量級鎖實現。 本系列文章將對HotSpot的synchronized鎖實現進行全面分析,內容包括偏向鎖、輕量級鎖、重量級鎖的加鎖、解鎖、鎖升級流程的原理及原始碼分析,希望給在研究synchronized路上的同學一些幫助。主要包括以下幾篇文章:

Java程式設計師必知的併發程式設計藝術——併發機制底層原理實現

Java程式語言允許執行緒訪問共享變數,為了確保共享變數能被準確和一致的更新,執行緒應該確保通過排他鎖單獨獲得這個變數。 volatile藉助Java記憶體模型保證所有執行緒能夠看到最新的值。(記憶體可見性) 實現原理: 將帶有volatile變數操作的Java程式碼轉

jvm synchronized底層設計與優化

通常來講synchronized被當做重量級鎖來使用,但其實它並不是一味地阻塞當前執行緒,而是通過鎖升級等方式進行了很多的優化。 一 重量級鎖(互斥同步或悲觀鎖) 最原始的,也是synchronized與生俱來的同步方式。 使用synchronized可以指定一

Linux:訊號的底層實現機制

1.訊號:系統先定義好的某些特定的事件,可以被髮生,也可以被接受。發生和接受的主體都是程序。 2.訊號機制:系統預先定義好的一些事件 3.程序對訊號的響應方式:當程序發生時,使用者可以要求程序以以下三種方式之一對訊號做出響應:                a.預

JVM Attach機制實現

感謝支付寶同事【寒泉子】的投稿 attach是什麼 在講這個之前,我們先來點大家都知道的東西,當我們感覺執行緒一直卡在某個地方,想知道卡在哪裡,首先想到的是進行執行緒dump,而常用的命令是jstack <pid>,我們就可以看到如下執行緒棧了 大家是否注意過上面圈起來的兩個執

synchronized底層實現學習

  上文我們總結了 synchronized 關鍵字的基本用法以及作用,並未涉及 synchronized 底層是如何實現的,所謂刨根問底,本文我們就開始 synchronized 原理的探索之旅吧(*>﹏<*)。   1. 物件鎖是什麼    不同於ReentrantL

vue三要素及底層實現機制

深入解析Vue 我們首先來熟悉一下我們這個文件所學習內容的流程。   先對比一下jQuery和Vue的區別,再講述Vue的MVVM模型,接著講解Vue的實現流程。   當然,我是不相信沒有對比哪來的傷害,沒有傷害哪能讓人記憶深入骨髓咧,向來都是被傷害過的人我才會記得你,我要恨你一

[五]類載入機制雙親委派機制 底層程式碼實現原理 原始碼分析 java類載入雙親委派機制是如何實現

Launcher啟動類 本文是雙親委派機制的原始碼分析部分,類載入機制中的雙親委派模型對於jvm的穩定執行是非常重要的 不過原始碼其實比較簡單,接下來簡單介紹一下 我們先從啟動類說起 有一個Launcher類   sun.misc.Launcher; 仔細看下這簡

iOS底層原理總結-- 深入理解 KVC\KVO 實現機制

iOS底層原理總結–OC物件的本質(一) - 掘金 iOS底層原理總結–OC物件的本質(二) - 掘金 iOS底層原理總結–OC物件的分類:instance、class、meta-calss物件的isa和superclass - 掘金 iOS底層原理總結-- KVO/KVC的本質

linux--fork()函式詳解及底層實現機制

fork底層實現機制:Linux中實現為呼叫clone函式,然後為do_fork,再然後copy_process()複製程序(複製相應資料結構例如:核心棧、thread_info、task_

Java中hashset底層實現機制

今天寫演算法,遇到了這個問題:HashSet<int[]> hs = new HashSet<>(); int[] arr1 = {4,5}; int[] arr2 = {4,5}; hs.add(arr1); hs.add(arr2); System

深入JVM機制1-synchronized

   資料同步需要依賴鎖,那鎖的同步又依賴誰?synchronized給出的答案是在軟體層面依賴JVM,而Lock給出的方案是在硬體層面依賴特殊的CPU指令,大家可能會進一步追問:JVM底層又是如何實現synchronized的?    本文所指說的JVM是指Hotspot的6u23版本,下面首先介紹s

【轉】Synchronized底層實現--概論

關於synchronized的底層實現,網上有很多文章了。但是很多文章要麼作者根本沒看程式碼,僅僅是根據網上其他文章總結、照搬而成,難免有些錯誤;要麼很多點都是一筆帶過,對於為什麼這樣實現沒有一個說法,讓像我這樣的讀者意猶未盡。 本系列文章將對HotSpot的synchronized鎖實現進行全