首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程同步-延迟模式

线程同步-延迟模式
EN

Stack Overflow用户
提问于 2015-05-26 12:39:07
回答 1查看 299关注 0票数 1
代码语言:javascript
复制
 public class Example {
    private boolean jobInProgress = false;

    public void job() {
        lock(this) {
           if (jobInProgress) {
               return;
           }
           jobInProgress = true;
        }
        // Code to execute job goes here
        // ...
    }

    void jobCompleted() {
        lock(this) {
            jobInProgress = false;
        }
    }
}

我从维基百科得到了这段代码,我有一件事我不确定。

为什么在返回语句之后没有在锁定的块中设置jobInProgress = true;?更明确一点的是,我将尝试给出一个场景:

  • 一个线程在其他线程等待时获得锁。
  • 它释放锁,但在执行jobInProgress =true之前;其中一个等待线程获取锁并测试仍然为false的条件。这是一个可行的方案,还是我没有得到正确的执行流程?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 12:47:23

你把自己弄糊涂了

代码语言:javascript
复制
lock(this) {
    if (jobInProgress) {
        return;
    } // <= closing brace of if

    // INSIDE LOCK, OUTSIDE IF
    jobInProgress = true;
} // <= closing brace of lock

我会注意到在维基

代码语言:javascript
复制
public void job() {
    synchronized(this) {
       if (jobInProgress) {
           return;
       }

       // INSIDE LOCK, OUTSIDE IF
       jobInProgress = true;
    }
    // Code to execute job goes here
    // ...
}

完全一样!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30458840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档