synchronized原理_synchronized 关键字底层原理
synchronized 關鍵字底層原理屬于 JVM 層面。
① synchronized 修飾同步語句塊
public class SynchronizedDemo {public void method() {synchronized (this) {System.out.println("synchronized 代碼塊");}} }通過 JDK 自帶的 javap 命令查看 SynchronizedDemo 類的相關字節碼信息:首先切換到類的對應目錄執行 javac SynchronizedDemo.java 命令,編譯后生成 SynchronizedDemo.class 文件,然后執行javap -c -s -v -l SynchronizedDemo.class。
synchronized關鍵字原理
從上面可以看出:
synchronized 同步語句塊的實現,使用的是 monitorenter 和 monitorexit 指令,其中 monitorenter 指令指向同步代碼塊的開始位置,monitorexit 指令則指明同步代碼塊的結束位置。 當執行 monitorenter 指令時,線程試圖獲取鎖,也就是獲取 monitor ( monitor 對象存在于每個 Java 對象的對象頭中,synchronized 鎖便是通過這種方式獲取鎖的,這也是為什么 Java 中任意對象都可以作為鎖的原因) 的持有權。當計數器為0,則可以成功獲取,獲取后將鎖計數器設為1,也就是加1;相應的,在執行 monitorexit 指令后,將鎖計數器設為0,表明鎖被釋放。如果獲取對象鎖失敗,那當前線程就要阻塞等待,直到鎖被另外一個線程釋放為止。
② synchronized 修飾方法
public class SynchronizedDemo2 {public synchronized void method() {System.out.println("synchronized 方法");} }synchronized關鍵字原理
synchronized 修飾方法,并沒有 monitorenter 指令和 monitorexit 指令,取得代之的是 ACC_SYNCHRONIZED 標識,該標識指明了該方法是一個同步方法,JVM 通過該 ACC_SYNCHRONIZED 訪問標志來辨別一個方法是否聲明為同步方法,從而執行相應的同步調用。
原文:https://www.jianshu.com/p/6b80cdd6625e作者:南方程序dog
來源:簡書
總結
以上是生活随笔為你收集整理的synchronized原理_synchronized 关键字底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 2020春运购票日历!2020年春节抢票
- 下一篇: 药丸屏幕太显眼了 iPhone 14 P
