美文网首页
Java Monitors

Java Monitors

作者: 炎族族长炎天帝 | 来源:发表于2020-04-02 23:20 被阅读0次

    简介

    在JVM中,每个对象都与一个Monitor关联。

    如果某块资源需要只允许单个线程进行访问,在操作系统中我们可以使用信号量来解决这个问题,但是并不是很方便,所以JVM为我们封装了这个操作,自动化的处理这件事情。Monitor对象如下图所示:

    image.png

    可以看到分三个区域:

    1. Special Room 代表正在执行的线程,该区域只允许一个线程进入
    2. Wait Set代表等待唤醒的线程集合
    3. Entry Set 获取锁失败而等待的线程集合

    举个栗子

            synchronized (Object.class){
                //log
                System.out.println("hellowold");
                Object.class.wait();
            }
    

    synchronized代码块中使用了Object的class对象里面的Minitor,我们可以假设现在两个线程T1和T2分别访问如下代码块。

    image.png

    那么在Monitor中的扭转是这样的:

    首先Thread1进入Synchronized代码块,首先会进入Entry Set区域,被CPU调度选中后会在Special Room开始执行wait()方法,此操作会释放锁并进入Wait Set区域。

    image.png

    接着Thread2进入Entry Set被CPU调度选中后进入Synchronized代码块,执行Wait后 同样进入Wait Set区域,如下图:

    image.png

    参考资料

    https://www.programcreek.com/2011/12/monitors-java-synchronization-mechanism/

    https://medium.com/swlh/difference-between-java-monitor-and-lock-4677c1b6715f

    相关文章

      网友评论

          本文标题:Java Monitors

          本文链接:https://www.haomeiwen.com/subject/flkqphtx.html