Ho una classe con più setter e voglio fare aggiornamenti atomici a più proprietà / variabili. Per quanto posso vedere ci sono tre metodi che potrebbero funzionare:
Chiama tutti i setter in synchronized
block.
synchronized {
obj.setA(a);
obj.setB(b);
// ...
}
Utilizza blocchi espliciti.
obj.lock();
obj.setA(a);
obj.setB(b);
// ...
obj.unlock();
Utilizza un oggetto di aggiornamento.
update = new UpdateObject();
update.setA(a);
update.setB(b);
// ...
obj.update(update);
Gli oggetti di aggiornamento vengono spesso utilizzati dall'API di Windows per apportare modifiche atomiche a un oggetto senza blocco esplicito in una singola chiamata di sistema.
C'è qualche metodo che mi è sfuggito?
Il controllo della concorrenza è una preoccupazione trasversale. Quali sono le implicazioni architettoniche di ciascun metodo? Qual è il metodo più idiomatico in Java?