技术文章参考
https://time.geekbang.org/column/article/86089
管程
1.管程是一种概念,任何语言都可以通用。
java采用的是管程技术,synchronized 关键字及 wait notify notifyAll 三个方法都是管程的组成部分。
而管程和信号量是等价的,所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。
管程,对应的英文是 Monitor,很多 Java 领域的同学都喜欢将其翻译成“监视器”,这是直译。操作系统领域一般都翻译成“管程”,这个是意译,而我自己也更倾向于使用“管程”。
MESA模型
java管程实现参考的是MESA模型。
有两大核心问题:
一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。
管程解决“互斥”问题的解决方案
管程解决互斥问题的思路很简单,就是将共享变量及其对共享变量的操作统一封装起来。
假如我们要实现一个线程安全的阻塞队列,一个最直观的想法就是:将线程不安全的队列封装起来,对外提供线程安全的操作方法,例如入队操作和出队操作。