美文网首页
Java Thread:(3) wait() and notif

Java Thread:(3) wait() and notif

作者: 戈壁堂 | 来源:发表于2021-04-30 20:20 被阅读0次

    Java Thread:(2) wait() and notify()

    版本中需要注意的是getBusyFlag()方法需要在循环中进行检查,如果采用如下方式,wait()结束后直接进行获取,依然可能无法得到flag——

    public synchronized void  getBusyFlag() {
        if (!tryGetBusyFlag()) {
            try {
                wait();
                tryGetBusyFlag()
            } catch (Exception e) {}
        }
    }
    
    1. 第一个线程获取到busyflag
    2. 第二个线程调用tryGetBusyFlag():返回false
    3. 第二个线程执行wait()方法:释放同步锁
    4. 第一个线程进入freeBusyFlag()方法:获取到同步锁
    5. 第一个线程调用notify()方法
    6. 第三个线程尝试调用getBusyFlag()方法,等待获取到锁对象
    7. 第一个线程退出freeBusyFlag()方法,释放了锁对象
    8. 第三个线程获取到锁对象,进入getBusyFlag()方法。此时busyflag被释放,这第三线程获取到busgflag并退出getBusyFlag()方法,同时释放锁
    9. 第二个线程收到了来自第一个线程的notify的通知,从wait()方法返回并获取到同步锁
    10. 第二个线程再次调用tryGetBusyFlag()方法,busgflag被占有,再次进入wait状态——如果采用上面的实现,这一步实际上无法获取到busyflag

    相关文章

      网友评论

          本文标题:Java Thread:(3) wait() and notif

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