今天在学习java原子类的时候,遇到了这篇博客,看到了同步代码块和同步方法的区别,之前没有意识到,这里记录下。
public class CP {
private int i = 0;
public synchronized int synchronizedMethodGet() {
return i;
}
public int synchronizedBlockGet() {
synchronized (this) {
return i;
}
}
}
从功能角度来说,上面两种方式没有差别,都能保证方法执行时候的原子性。从性能上来看,同步方法比同步代码块更有优势。我们使用JDK提供的javap命令,查看生成的字节码。
E:\code_space\test\bin>javap -c CP
Compiled from "CP.java"
public class CP {
public CP();
Code:
0: aload_0
1: invokespecial #10 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_0
6: putfield #12