gpt4 book ai didi

java - 是否可以 "synchronized if"声明?

转载 作者:行者123 更新时间:2023-11-30 08:51:23 25 4
gpt4 key购买 nike

我正在尝试找到一种干净的方法来写出一个方法,该方法可能会或可能不会包装在基于 boolean 值的 synchornized 锁中。然而,我能找到的唯一方法是非常丑陋的。

boolean lock = true;

void remove(Object o) {
if(lock) {
synchornized(this) {
// remove o
}
} else {
// remove o
}
}

但是,我想知道是否有更好的方法来执行此操作,也许是“同步 if”类型的语句?

最佳答案

  1. 您可以使用AtomicBoolean:

    private final AtomicBoolean lock = new AtomicBoolean(false);
    ...

    // compare if it is false and set it to true, no synchronized needed
    if (lock.compareAndSet(false, true)) {
    statusMessage = "lock acquired";
    } else {
    statusMessage = "I'm already locked";
    }
  2. 或将方法定义为synchronized

您当前的锁检查不在同步块(synchronized block)中:

if(lock) {
synchronized(this) {

因此,在您将其设置为 false 之前,有 2 个线程可能会通过此检查,真正的信号量是 synchronized(this)

关于java - 是否可以 "synchronized if"声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567193/

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