We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对于同步代码块来说通过反编译产生的结果和作者的一致,monitorenter指令插入到同步代码块的开始位置,monitorexit指令插入到同步代码块的结束位置!
但是对于同步方法来说就不是通过monitor,写一个同步方法通过反编译可以看出 0: aload_0 1: invokevirtual #5 // Method method:()V 4: goto 0 他是通过invokevirtual 指令, 在VM字节码层面并没有任何特别的指令来实现被synchronized修饰的方法,而是在Class文件的方法表中将该方法的accessflags字段中的synchronized标志位置1,表示该方法是同步方法并使用调用该方法的对象或该方法所属的Class在JVM的内部对象表示Klass做为锁对象。
The text was updated successfully, but these errors were encountered:
是这样子的,在Java并发编程这本书里,讲到synchronized同步代码块,是使用 monitor 监视器来实现的;同步方法的话,该书也没有具体的说。
Sorry, something went wrong.
No branches or pull requests
对于同步代码块来说通过反编译产生的结果和作者的一致,monitorenter指令插入到同步代码块的开始位置,monitorexit指令插入到同步代码块的结束位置!
但是对于同步方法来说就不是通过monitor,写一个同步方法通过反编译可以看出
0: aload_0
1: invokevirtual #5 // Method method:()V
4: goto 0
他是通过invokevirtual 指令,
在VM字节码层面并没有任何特别的指令来实现被synchronized修饰的方法,而是在Class文件的方法表中将该方法的accessflags字段中的synchronized标志位置1,表示该方法是同步方法并使用调用该方法的对象或该方法所属的Class在JVM的内部对象表示Klass做为锁对象。
The text was updated successfully, but these errors were encountered: