一:并发模型
在管程模型里,共享变量和对共享变量的操作是被封装起来的,图中最外层的框就代表封装的意思。框的上面只有一个入口,并且在入口旁边还有一个入口等待队列。当多个线程同时试图进入管程内部时,只允许一个线程进入,其他线程则在入口等待队列中等待。管程里还引入了条件变量的概念,而且每个条件变量都对应有一个等待队列,如下图,条件变量 A 和条件变量 B 分别都有自己的等待队列。
MESA管程模型.png二:Java基于MESA管程模型实现
1:互斥锁均是基于MESA管程模型的,e.g:synchronized,ReentrantLock等。
2:管程内部的条件变量是基于锁的,因此JUC下的Condition是通过Lock而来的,即Condition = lock.newCondition()。
3:JUC通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问题,Condition 用于解决同步问题。
网友评论