java同步和非同步_java – jvm同步和非同步方法之间的差异

我有以下课程:

public class SeqGenerator {

int last = 0;

volatile int lastVolatile = 0;

public int getNext() {

return last++;

}

public synchronized int getNextSync() {

return last++;

}

public int getNextVolatile() {

return lastVolatile++;

}

public void caller() {

int i1 = getNext();

int i2 = getNextSync();

int i3 = getNextVolatile();

}

}

当我查看反汇编代码时,我没有看到三个方法getNext(),getNextSync()和getNextVolatile()的表示之间的区别.

public int getNext();

Code:

0: aload_0

1: dup

2: getfield #2; //Field last:I

5: dup_x1

6: iconst_1

7: iadd

8: putfield #2; //Field last:I

11: ireturn

public synchronized int getNextSync();

Code:

0: aload_0

1: dup

2: getfield #2; //Field last:I

5: dup_x1

6: iconst_1

7: iadd

8: putfield #2; //Field last:I

11: ireturn

public int getNextVolatile();

Code:

0: aload_0

1: dup

2: getfield #3; //Field lastVolatile:I

5: dup_x1

6: iconst_1

7: iadd

8: putfield #3; //Field lastVolatile:I

11: ireturn

public void caller();

Code:

0: aload_0

1: invokevirtual #4; //Method getNext:()I

4: istore_1

5: aload_0

6: invokevirtual #5; //Method getNextSync:()I

9: istore_2

10: aload_0

11: invokevirtual #6; //Method getNextVolatile:()I

14: istore_3

15: return

JMV如何区分这些方法?

生成的代码与这些方法以及它们的调用者相同. JVM如何执行同步?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值