我需要确保一篇文章仅售出一次。
还必须在多个线程上确保这一点。

检查buyer变量是否不为null是否足够?因此,我认为第二个呼叫者会收到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方法时没有机会无法购买该商品吗?

最佳答案

方法同步的事实确实使它安全-只要这是您更新买方的唯一方法。

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

10-11 18:53