Мне нужно убедиться, что изделие продается только один раз. Это должно быть обеспечено также для нескольких потоков.Убедитесь, что переменная установлена только один раз
Достаточно ли проверить, нет ли переменной 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
вызывается в то же время (точно то же время)?
Ваш код правильный, но с AtomicRefference вы можете достичь более высокой производительности и меньше потоков раздор. – Mikhail
Я бы проверил 'this.sold == true'. Я не понимаю, почему усложнять покупатель. – Ron
Просто пример, попробовал что-то еще. – mhmpl