弄浪的鱼

在并发编程中有两个核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信和协作。解决这两个问题的方法前人已经替我们总结出来理论模型,分别是管程模型信号量模型.

MESA管程模型

Java中实现管程有两种方式

  1. 一是使用synchronized关键字给代码块添加隐式锁实现互斥,同时使用notify()notifyAll()实现同步
  2. 二是使用 Java SDK 并发包下的 Lock 和 Condition 两个接口,来实现管程.
    1. Lock 的特性包括:能够响应中断、支持超时和非阻塞地获取锁
    2. Condition 实现了管程模型里面的条件变量。

注:Java 参考了 MESA 模型,语言内置的管程(synchronized)对 MESA 模型进行了精简。MESA 模型中,条件变量可以有多个,Java 语言内置的管程里只有一个条件变量。Java 并发包下的 Lock&Condition则则支持多个条件变量。