Aggiornamenti simultanei e atomici a più proprietà / variabili di un oggetto

0

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?

    
posta user3998276 27.01.2016 - 11:17
fonte

1 risposta

2

Ciò che tutti questi metodi hanno in comune è che l'aggiornamento a più proprietà è solo atomico se tutti l'aggiornamento delle proprietà utilizza lo stesso metodo, ma anche tutti leggendo le proprietà e volendole aggiornare atomicamente legge le proprietà usando uno di questi metodi di blocco.

Le tue possibilità migliorano notevolmente se invece di avere più proprietà, hai un oggetto che rappresenta tutte le proprietà e solo un getter / setter per quell'unico oggetto.

    
risposta data 27.01.2016 - 12:23
fonte

Leggi altre domande sui tag