0%

技术文章参考

https://time.geekbang.org/column/article/86089

管程

1.管程是一种概念,任何语言都可以通用。

java采用的是管程技术,synchronized 关键字及 wait notify notifyAll 三个方法都是管程的组成部分。

而管程和信号量是等价的,所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。

管程,对应的英文是 Monitor,很多 Java 领域的同学都喜欢将其翻译成“监视器”,这是直译。操作系统领域一般都翻译成“管程”,这个是意译,而我自己也更倾向于使用“管程”。

MESA模型

java管程实现参考的是MESA模型。

有两大核心问题:
一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。

管程解决“互斥”问题的解决方案

管程解决互斥问题的思路很简单,就是将共享变量及其对共享变量的操作统一封装起来。

假如我们要实现一个线程安全的阻塞队列,一个最直观的想法就是:将线程不安全的队列封装起来,对外提供线程安全的操作方法,例如入队操作和出队操作。