synchronized的实现原理是什么?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

synchronized的实现原理是什么?

游客pklijor6gytpx 2019-11-11 14:32:51 2230

synchronized的实现原理是什么?

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击链接欢迎加入感兴趣的技术领域群。

开发者
分享到
取消 提交回答
全部回答(3)
  • huc_逆天
    2020-01-04 23:18:20

    线程安全两种,显式锁lock,同步关键字

    0 0
  • masonwang
    2019-12-11 22:18:46

    Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。

    同步语句块的实现使用的是monitorenter 和 monitorexit 指令,其中monitorenter指令指向同步代码块的开始位置,monitorexit指令则指明同步代码块的结束位置,当执行monitorenter指令时,当前线程将试图获取 objectref(即对象锁) 所对应的 monitor 的持有权,当 objectref 的 monitor 的进入计数器为 0,那线程可以成功取得 monitor,并将计数器值设置为 1,取锁成功。如果当前线程已经拥有 objectref 的 monitor 的持有权,那它可以重入这个 monitor,重入时计数器的值也会加 1。倘若其他线程已经拥有 objectref 的 monitor 的所有权,那当前线程将被阻塞,直到正在执行线程执行完毕,即monitorexit指令被执行,执行线程将释放 monitor(锁)并设置计数器值为0 ,其他线程将有机会持有 monitor 。

    方法级的同步是隐式,即无需通过字节码指令来控制的。当方法调用时,调用指令将会 检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先持有monitor(虚拟机规范中用的是管程一词), 然后再执行方法,最后再方法完成(无论是正常完成还是非正常完成)时释放monitor。

    0 0
  • 游客pklijor6gytpx
    2019-11-11 14:33:32

    解决并发情况下数据同步访问的一个很重要的关键字。保证一个共享资源在同一时间只会被一个线程访问到时,可以在代码中使用synchronized关键字对类或者对象加锁

    0 0
添加回答
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章
相似问题
推荐课程