美文网首页
8.synchronized关键字

8.synchronized关键字

作者: 进击的小鹿 | 来源:发表于2021-11-26 20:24 被阅读0次

1.synchronized的用途

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性

Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:

  1. 普通同步方法,锁是当前实例对象
  2. 静态同步方法,锁是当前类的class对象
  3. 同步方法块,锁是括号里面的对象
总结1:

A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

2.实现机制

Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现, 无论是显式同步,还是隐式同步都是如此。

同步代码块由 monitorenter 和 monitorexit 指令来实现同步的
同步方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。

下面是代码反编译示例
同步代码块:

同步方法:

jdk8中对synchronized做的优化 :没找到

参考:
http://www.cnblogs.com/paddix/p/5367116.html
http://blog.csdn.net/javazejian/article/details/72828483?locationNum=5&fps=1
http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html

相关文章

网友评论

      本文标题:8.synchronized关键字

      本文链接:https://www.haomeiwen.com/subject/exavlxtx.html