Una domanda è sorta nella mia mente mentre esaminavo l'implementazione della classe ReentrantLock. ReentrantLock è serializzabile e nella documentazione indica che qualsiasi blocco deserializzato è sempre sbloccato a prescindere dallo stato in cui è stato serializzato. Questo ha senso perché lo stato Lock e unlock è fondamentalmente basato sui thread al runtime (che detengono il lock) e mentre noi de-serializziamo quei thread potrebbero non essere disponibili.Perché i blocchi sono serializzabili in java?
La domanda è: Perché abbiamo bisogno del blocco per persistere perché non memorizza lo stato di base (bloccato/sbloccato)? In questo momento posso supporre che possa essere per la proprietà equità della serratura. Ma l'equità è di nuovo dipendente dal sistema operativo sottostante, quindi se persiste il blocco su una piattaforma e deserializzato su un'altra perché (scrivi una volta ed esegui ovunque) potrebbe non funzionare, quindi è inutile insistere solo sull'equità.
Spero di aver messo chiaramente la mia confusione sulla serializzazione di blocco in java.
In questo caso, il blocco potrebbe essere dichiarato come transitorio e dopo la deserializzazione, in ogni caso, è necessario bloccare nuovamente la sezione critica. – Gourabp
@Gourabp è un buon punto. Voglio dire, puoi ancora farlo, no? Penso che abbiano fatto in questo modo solo per essere "al sicuro" con la serializzazione. Ma a parte questo, credo di non essere troppo sicuro del perché lo farebbero. –