“嗨,阿米戈!”
“在我之前的课程中,我有时会使用‘互斥锁’和‘监控器’这两个词,现在是时候告诉你它们的意思了。”
“我洗耳恭听。”
“互斥量是一个用于同步线程/进程的特殊对象。它有两种可能的状态:忙碌和空闲。简单来说,互斥量是一个布尔变量,可以有两个值:忙碌(真)和空闲(假)。”
“当一个线程想要获得一个对象的所有权时,它将对象的互斥量标记为忙碌。当它完成对对象的处理后,它将其互斥量标记为空闲。”
“换句话说,互斥量就像门上的‘忙碌/空闲’标志?”
“是的。而且这样的互斥量与 Java 中的每个对象相关联。只有 Java 机器才能直接访问互斥量。它对程序员是隐藏的。”
“那我们怎么用呢?”
“在 Java 中,我们可以通过监视器使用互斥量。”
“监视器是一种特殊的机制(一段代码),位于互斥量之上。它保证与互斥量的正确交互。将对象标记为忙碌是不够的。仍然有必要确保其他线程不会尝试使用忙碌的对象。”
“在 Java 中,监视器是使用关键字 synchronized 实现的。”
“当您编写同步块时,Java 编译器会用三段代码替换它:”
1)在 synchronized 块的开头,添加了将互斥量标记为繁忙的代码。
2) 在 synchronized 块的末尾,添加了将互斥量标记为空闲的代码。
3) 在同步块