gpt4 book ai didi

java - 确保一个变量只设置一次

转载 作者:行者123 更新时间:2023-11-29 10:02:11 24 4
gpt4 key购买 nike

我需要确保一件商品只售出一次。这也必须通过多个线程来确保。

是否足以检查 buyer 变量是否不为空?所以在我看来,第二个调用者会收到一个AlreadyBoughtException

public synchronized void buy(Buyer buyer) throws AlreadyBoughtException {
if (this.buyer != null) {
throw new AlreadyBoughtException();
}

System.out.println(buyer + " bought article " + identifier);

this.buyer = buyer;
this.sold = true;
}

这是线程安全的吗?我可以假设当 buy 方法被同时调用时(完全相同的时间),商品不可能被购买吗?

最佳答案

只要不能通过非同步方法设置buyer,您的代码就是线程安全的。

JVM 将确保同步方法永远不会发生“完全相同的时间”——一个调用者将被视为第一个调用者,另一个调用者必须等到第一个调用完成才能继续。

关于java - 确保一个变量只设置一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163782/

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