第一部分:并发理论基础08->并发编程万能钥匙

1.管程

管程就是解决并发问题的万能钥匙

管理共享变量以及对共享变量的操作过程,让他们支持并发

2.MESA模型

互斥:统一个时刻只允许一个线程访问共享资源
同步:线程之间如何通信,协作

解决互斥问题:将共享变量及对共享变量的操作统一封装起来。
将线程不安全的队列封装起来,对外提供线程安全的操作方法,

image

每个条件变量都有一个对应的等待队列
image


public class BlockedQueue<T>{
  final Lock lock =
    new ReentrantLock();
  // 条件变量:队列不满  
  final Condition notFull =
    lock.newCondition();
  // 条件变量:队列不空  
  final Condition notEmpty =
    lock.newCondition();

  // 入队
  void enq(T x) {
    lock.lock();
    try {
      while (队列已满){
        // 等待队列不满 
        notFull.await();
      }  
      // 省略入队操作...
      //入队后,通知可出队
      notEmpty.signal();
    }finally {
      lock.unlock();
    }
  }
  // 出队
  void deq(){
    lock.lock();
    try {
      while (队列已空){
        // 等待队列不空
        notEmpty.await();
      }
      // 省略出队操作...
      //出队后,通知可入队
      notFull.signal();
    }finally {
      lock.unlock();
    }  
  }
}
posted @ 2021-06-30 17:11  SpecialSpeculator  阅读(25)  评论(0编辑  收藏  举报