Discuss / Java / 发现个好玩的,什么情况下,需要两个锁对象?

发现个好玩的,什么情况下,需要两个锁对象?

Topic source

b3tter

#1 Created at ... [Delete] [Delete and Lock User]

有两个共享变量举个例子,领导安排活,发薪水,工人做活,拿工资;且假设活和工资足够工人,领导谈完项目才能拿到钱,工人做完工作才能拿工资

private int jobs;

private int salaries;

private final Object lockObjA = new Object();

private final Object lockObjB = new Object();

public void leader(int n) {
    synchronized (lockObjA) {
        this.jobs += n;
        // todo plan
        synchronized (lockObjB) {
            this.salaries += n;
            // todo deal
        }
    }
}

public void worker(int n) {
    synchronized (lockObjA) {
        this.jobs -= n;
        // todo job
        synchronized (lockObjB) {
            this.salaries -= n;
            // todo deal
        }
    }
}

🌙

#2 Created at ... [Delete] [Delete and Lock User]

不就是那张图

找工作需要经验,经验需要工作获得。

小绿龙,原来你在这里藏着


  • 1

Reply