gpt4 book ai didi

java - 多线程 : Explicit locks

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:23 26 4
gpt4 key购买 nike

我对这行代码有疑问:

class S1Es3SharedState {
//lock
private final Lock lock = new ReentrantLock();
private int x = 0;

public int getX() {
lock.lock();
try {
return x;
} finally {
lock.unlock();
}
}

public void incrementX() {
lock.lock();
try {
this.x = x++;
} finally {
lock.unlock();
}
}
}

同一个对象在 getX 方法和 incrementX 方法中锁定语句是什么意思?
如果我理解这意味着同一个对象用于锁定两个方法的语句,因此,如果两个方法都是空闲的,则线程可以进入其中一个方法,对吗?

例如:
ThreadA 在里面getX 方法,现在有一个上下文切换,因此 ThreadA 正在等待(在方法内部)而 ThreadB 正在运行并希望进入 getX() 方法但它不能,因为已经有 ThreadA。此外,如果 ThreadB 需要进入 incrementX 方法,它仍然不能,因为 ThreadA 在 getX 方法中。所以我使用的锁对象允许进入一个线程,只要这两个方法都是免费的(没有正在运行的线程)。有可能的?发生这种情况是因为我使用了同一个对象来锁定 getX 和 incrementX 方法。

最佳答案

这意味着两个不同的线程T1和T2无法获取
并在同一时刻递增变量。

简单地说return x;this.x = x++;是不能执行的
同时通过两个不同的线程 T1 和 T2。线程
先进入者获胜,只有当它完成并调用解锁时,
第二个将有机会自己获得锁
并做好他的工作。

关于java - 多线程 : Explicit locks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com