管程
管程是一种抽象概念,其具体包含大概两部分:
- 共享的数据,
- 另一部分是操作共享数据的函数或者方法.
管程保证同一时刻最多只有一个操作者能够进入管程的保护区域,因此管程更像是一种机制,他的具体实现
- 例如,在java中,管程的实现就可以通过
synchronized
和wait
,以及notify
和notifyall
这一个关键字和这三个方法.
synchronized
关键字的两种用法如下所示:
//定义synchronized 代码块
synchronized(object){...}
//定义synchronized方法
synchronized public void method_name(void) {....}
- 而当synchronized代码块被声明时,Java编译器会生成monitorenter和monitorexit两个字节码.而当该代码块被执行时,JAVA虚拟机则会生成一个管城,他的保护对象就是修饰的参数对象object,保护的区域则是两个字节码指令之间的指令代码.
- 而当synchronized修饰方法时,该方法同样会生成一个管程,其保护的对象为方法属性的对象,保护的区域是整个方法.