Lock vs Monitor

2019-07-19  本文已影响0人  christ_yang

参考资料:
1:https://howtodoinjava.com/java/multi-threading/multithreading-difference-between-lock-and-monitor/
2:https://www.cnblogs.com/noteless/p/10394054.html
3:https://www.cnblogs.com/keeplearnning/p/7020287.html
4:https://wangxinchun.iteye.com/blog/2367654

java面试中比较常见的问题,笼统的说:lock是monitor更深层的实现方式。下面还是详细回忆下,昨日学习内容。

纠正:

锁(lock):

锁是对象头里的一个逻辑结构,当线程持有该对象的锁时(synchronize关键字),其他线程若想访问该资源对象,则必须等待持有者线程释放锁。

纠正:

补充:

注意:

// 锁的是ClassObjLock类对象
public void ClassObjLock() {
  public void classLock() {
    synchronized(getClass()) {
      dosomethings...
    }
  }
}
猜测:
以上代码,若某线程调用classLock方法,在执行完成该方法前(即未释放锁)
那么另一线程进行构造对象操作:new ClassObjLock() 是否会报错?
**猜测会报错**

// 锁的是ClassObjLock类的实例对象
public void InstanceObjLock() {
  public  void InstanceLock() {
    // this指向每个由该类构造的实例对象
    synchronized(this) {
      dosomethings...
    }
  }
}

java变量详解

监视器(monitor):

监视器是一个逻辑结构,可以比作是一个建筑物,建筑物里有一间特殊的房间,称为资源对象。线程进入房间获取资源前,需先进入建筑物,若资源对象被其他线程持有,那后续进入的线程,将在入口集(entry set)中等待。某线程在对资源对象处理完成后,将会释放对象,并退出监视器。

纠正:

2019-07-20 8:37:00
疑问:

  1. 它指代什么?等待线程?理由是什么?
  2. 保留监视器的所有权,是指什么?持有锁吗?理由是什么?

注意:

2019-07-18 22:20:00
疑问:

  1. 等待集有什么用?里面的线程,如何退出?
    2019-07-20 10:08:00
    在互斥时,不需要等待集;在合作时,等待集一般通过java中的wait关键字实现。
    等待集的线程不存在退出说法,只有持有监视器的线程,才能数据状态不满足的情况下,进入等待集等待或直接退出监视器。参考资料3
image
监视器-合作模式
上一篇 下一篇

猜你喜欢

热点阅读