gpt4 book ai didi

java - Java 实例级别的同步

转载 作者:行者123 更新时间:2023-12-01 09:07:44 25 4
gpt4 key购买 nike

我注意到以下一段代码:

   synchronized (this) {
if (executed) throw new IllegalStateException("Already executed.");
executed = true;

没有意义吗?毕竟是同步的,那为什么是if (execished) throw new IllegalStateException("Alreadyexecute.");

最佳答案

I noted the following a piece of code ... Is it pointless?

当然很大程度上取决于上下文,但从表面上看,代码做了非常具体且有用的事情。所以(呃)我猜是满分的。

该代码确保synchronized block 下面的代码仅执行一次。这显然是在多线程应用程序中。您可能会说,当然,您所需要的只是一个 AtomicBoolean :

private final AtomicBoolean executed = new AtomicBoolean();
...
// make sure that this is only executed once
if (!executed.compareAndSet(false, true)) {
throw new IllegalStateException("Already executed.");
}

上面的代码不再需要synchronized block ,但是代码的效果是相同的。我也可能认为代码应该返回某种错误代码而不是抛出错误,但这是一个特定于实现的细节。

希望这有帮助。

关于java - Java 实例级别的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41128501/

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