File tree 1 file changed +2
-2
lines changed
1 file changed +2
-2
lines changed Original file line number Diff line number Diff line change @@ -549,15 +549,15 @@ public class SynchronizedDemo2 {
549
549
550
550
![ synchronized关键字原理] ( https://oss.javaguide.cn/github/javaguide/synchronized%E5%85%B3%E9%94%AE%E5%AD%97%E5%8E%9F%E7%90%862.png )
551
551
552
- ` synchronized ` 修饰的方法并没有 ` monitorenter ` 指令和 ` monitorexit ` 指令,取得代之的确实是 ` ACC_SYNCHRONIZED ` 标识,该标识指明了该方法是一个同步方法。JVM 通过该 ` ACC_SYNCHRONIZED ` 访问标志来辨别一个方法是否声明为同步方法,从而执行相应的同步调用。
552
+ ` synchronized ` 修饰的方法并没有 ` monitorenter ` 指令和 ` monitorexit ` 指令,取而代之的是 ` ACC_SYNCHRONIZED ` 标识,该标识指明了该方法是一个同步方法。JVM 通过该 ` ACC_SYNCHRONIZED ` 访问标志来辨别一个方法是否声明为同步方法,从而执行相应的同步调用。
553
553
554
554
如果是实例方法,JVM 会尝试获取实例对象的锁。如果是静态方法,JVM 会尝试获取当前 class 的锁。
555
555
556
556
#### 总结
557
557
558
558
` synchronized ` 同步语句块的实现使用的是 ` monitorenter ` 和 ` monitorexit ` 指令,其中 ` monitorenter ` 指令指向同步代码块的开始位置,` monitorexit ` 指令则指明同步代码块的结束位置。
559
559
560
- ` synchronized ` 修饰的方法并没有 ` monitorenter ` 指令和 ` monitorexit ` 指令,取得代之的确实是 ` ACC_SYNCHRONIZED ` 标识,该标识指明了该方法是一个同步方法。
560
+ ` synchronized ` 修饰的方法并没有 ` monitorenter ` 指令和 ` monitorexit ` 指令,取而代之的是 ` ACC_SYNCHRONIZED ` 标识,该标识指明了该方法是一个同步方法。
561
561
562
562
** 不过两者的本质都是对对象监视器 monitor 的获取。**
563
563
You can’t perform that action at this time.
0 commit comments