2013-07-31 15 views
6

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.

risposta

5

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html http://download.java.net/jdk7/archive/b123/docs/api/java/util/concurrent/locks/ReentrantLock.html

direi che il motivo per cui persiste blocco è così che siete in grado di serializzare oggetti che dipendono blocco stesso. Se Lock non fosse serializzabile, qualsiasi cosa che dipende da esso non potrebbe essere serializzata.

Si potrebbe anche essere in grado di memorizzare il proprietario, holdCount, queuedThreads e tutte le altre cose che è possibile vedere nella pagina API che ho collegato sopra per ReentrantLock.

+1

In questo caso, il blocco potrebbe essere dichiarato come transitorio e dopo la deserializzazione, in ogni caso, è necessario bloccare nuovamente la sezione critica. – Gourabp

+1

@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. –

Problemi correlati