首页 > 其他 > 详细

并发编程-synchronized 底层实现原理(一)

时间:2021-04-26 22:50:27      阅读:24      评论:0      收藏:0      [点我收藏+]

目录

    一、同步基础
    synchronized 作用:

    1. 原子性: 确保线程互斥的访问同步代码。
    2. 可见性: 在同步代码块退出时,会将变量同步到主内存中。
    3. 有序性: 代码块中的代码保证有序。

    synchronized 使用方式:

    1. 实例同步方法:
    // 锁对象为: 当前实例
    public synchronized method(){
    	// do something
    }
    
    1. 静态同步方法:
    // 锁对象为: 当前 class 对象
    public static synchronized method(){
    	// do something
    }
    
    1. 同步代码块:
    // 锁对象为: 括号中的对象
    public void method(){
    	// 可配置任意非 null 对象
    	synchronized(object){
    		// do something
    	}
    }
    

    同步基础:
    当一个线程进入到同步代码块时,必须先获取锁,在退出或发生异常时,释放锁。

    Java 虚拟机中的同步(synchronized)是用 monitor 的进入和退出来实现。无论显示同步(有明确的 monitorenter 和 monitorexit 指令),还是隐式同步(依赖方法调用和返回指令实现)都是如此。

    在 Java 语言中,同步用的最多的地方是经 synchronized 锁修饰的同步方法,同步方法并不用 monitorenter 和 monitorexit 指令来实现,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。

    monitorenter 和 monitorexit 指令用于编译同步代码块:

    二、Java 对象头

    三、锁升级

    1. 偏向锁
    2. 轻量级锁

    四、总结

    并发编程-synchronized 底层实现原理(一)

    原文:https://www.cnblogs.com/chen-jia-cheng/p/14705067.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
    © 2014 bubuko.com 版权所有
    打开技术之扣,分享程序人生!