2010-01-19 19 views
6

Qual è il rapporto con la sicurezza del filo e gli oggetti immutabili? Rende più facile condividere una singola risorsa tra più thread? Se gli oggetti immutabili sono apolidi, possono essere raggruppati in un contenitore come un contenitore J2EE?Cosa sono gli oggetti immutabili?

grazie

risposta

5

Gli oggetti thread-safe sono oggetti che consentono l'accesso simultaneo da più thread. La loro implementazione garantisce (ad esempio tramite lockings/synchronzized methods/...) che non entreranno in uno stato non valido. Inoltre, non ci dovrebbero essere perdite di dati.

Gli oggetti non modificabili non possono essere modificati dopo la loro creazione. Quindi: Sì, sono una specie di apolide.

Poiché gli oggetti non modificabili non possono essere modificati, non è necessario il blocco: l'accesso alla lettura degli oggetti è sempre protetto da un thread (quando non si modificano le variabili). Pertanto, i veri oggetti immutabili sono sempre sicuri.

+1

Normalmente gli oggetti senza stato non hanno stato. Gli oggetti immutabili non possono passare a uno stato diverso da quello in cui sono stati creati, quindi hanno esattamente uno stato. –

4

Immutabile Oggetto: Un oggetto che non cambia il suo stato interno.

La relazione con thread-safety: se un oggetto non può essere mutato, è sicuro utilizzarlo su thread cioè non è necessario avere blocchi o simili per garantire la coerenza attraverso i thread.

10

Gli oggetti immutabili sono oggetti che non possono essere modificati. Se un oggetto non può essere modificato, non vi è alcuna preoccupazione che un thread concorrente cambi lo stato dell'oggetto "dietro la parte posteriore" del thread in esecuzione e pertanto non è necessario proteggere gli oggetti immutabili tramite la sincronizzazione o qualche altra tecnica.

+1

anche se l'oggetto è senza stato è inutile parlare di immutabilità, perché non c'è stato da mutare. Quindi è sicuro mettere in comune gli oggetti in un contenitore. – Mauricio

+0

Una cosa da considerare è che se provate a cambiare un oggetto immutabile (ad esempio una stringa) riassegnando una variabile che punta a quell'oggetto, gli altri thread non vedranno quella modifica. Quindi "modifiche" a un oggetto immutabile non possono essere condivise tra thread. – Aaron

+0

Se provi a 'cambiare' qualsiasi oggetto riassegnando una variabile che fa riferimento a quell'oggetto, allora non sai cosa stai facendo. –

Problemi correlati