Las variables locales se almacenan en la propia pila de cada subproceso. Eso significa que las variables locales nunca se comparten entre hilos. Eso también significa que todas las variables primitivas locales son seguras para hilos.
referencias locales a objetos son un poco diferentes. La referencia en sí no es compartida. El objeto al que se hace referencia, sin embargo, no se almacena en la pila local de cada subproceso. Todos los objetos se almacenan en el montón compartido. Si un objeto creado localmente nunca escapa al método en el que se creó, es seguro para subprocesos. De hecho, también puede pasarlo a otros métodos y objetos, siempre que ninguno de estos métodos u objetos haga que el objeto pasado esté disponible para otros hilos.
miembros de objetos se almacenan en el montón junto con el objeto. Por lo tanto, si dos subprocesos llaman a un método en la misma instancia de objeto y este método actualiza los miembros de objeto, el método no es seguro para subprocesos.
Comprobación de seguridad de subprocesos: si un recurso se crea, usa y elimina dentro del control del mismo subproceso, y nunca escapa al control de este subproceso, el uso de ese recurso es seguro para subprocesos.
Desde: http://tutorials.jenkov.com/java-concurrency/thread-safety.html
1, a pesar de que sin duda puede 'pasar', (señal), los objetos a otros hilos, pero el subproceso que creó por lo general debe 'renunciar a la propiedad' de la misma, por ejemplo. anulando su propia referencia o sobrescribiéndola creando otro objeto, de modo que dos hilos nunca puedan operar en el mismo objeto. Si esto no se hace, el objeto se comparte, como usted describe, y necesitaría bloqueos para acceder. –
Sí, por esa razón, eliminar el objeto anulando la referencia es una buena idea. – Erol
¡Estuve a punto de hacer esta pregunta! – JohnMerlino