我需要确保一篇文章仅售出一次。
还必须在多个线程上确保这一点。
检查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/