Le variabili locali sono memorizzate nello stack di ciascun thread. Ciò significa che le variabili locali non vengono mai condivise tra thread. Ciò significa anche che tutte le variabili primitive locali sono thread-safe.
I riferimenti locali agli oggetti sono leggermente diversi. Il riferimento stesso non è condiviso. L'oggetto a cui si fa riferimento, tuttavia, non è memorizzato nello stack locale di ciascun thread. Tutti gli oggetti sono memorizzati nell'heap condiviso. Se un oggetto creato localmente non fugge mai il metodo in cui è stato creato, è thread-safe. In effetti è possibile anche passarlo ad altri metodi e oggetti purché nessuno di questi metodi o oggetti renda l'oggetto passato disponibile ad altri thread.
I membri dell'oggetto vengono archiviati nell'heap insieme all'oggetto. Pertanto, se due thread chiamano un metodo sulla stessa istanza dell'oggetto e questo metodo aggiorna i membri dell'oggetto, il metodo non è thread-safe.
Controllo sicurezza filettatura: se una risorsa viene creata, utilizzata e disposta nel controllo dello stesso thread e non sfugge mai al controllo di questo thread, l'utilizzo di tale risorsa è thread-safe.
Da: http://tutorials.jenkov.com/java-concurrency/thread-safety.html
+1, anche se si può certamente 'passaggio', (segnale), gli oggetti ad altri thread, ma il thread che ha creato solito deve 'cedere la proprietà' di essa, ad esempio. annullando il proprio riferimento o sovrascrivendolo creando un altro oggetto, in modo che due thread non possano mai operare sullo stesso oggetto. Se ciò non viene fatto, l'oggetto viene condiviso, come descritto, e necessita di blocchi per l'accesso. –
Sì, per questo motivo, smaltire l'oggetto annullando il riferimento è una buona idea. – Erol
Grande stavo per fare questa domanda !!!! – JohnMerlino