同步指令

Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,这两种同步结构都是

使用管程(Monitor,更常见的是直接称为“锁”)来实现的。

方法级别的同步

方法级的同步是隐式的,无须通过字节码指令来控制,虚拟机可以从方法常量池中的

方法表结构中的ACC_SYNCHRONIZED访问标志得知一个方法是否被声明为同步方法。

当方法调用时,调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置,

如果设置了,执行线程就要求先成功持有管程,然后才能执行方法,最后当方法完成时释放管程。

同步一段指令序列

通常是使用synchronized语句块来表示,Java虚拟机的指令集中有monitorentermonitorexit两条

指令来支持synchronized关键字的语义。