Nada.
La variable r
es no el objeto MyRunnable
sí mismo; es simplemente una referencia a ese objeto dentro de su bloque de código.
Inicialmente crea un nuevo objeto MyRunnable
. Y luego, le "da el nombre"/lo asigna a la variable r
. Luego, pásalo al constructor Thread
(usando la variable para describir de qué objeto estás hablando). Dentro de ese constructor, casi seguramente se asignará a otras referencias (en el JDK que estoy usando, es un campo llamado target
).
Más tarde, vuelva a marcar su referencia r
en otro objeto, en este caso, el objeto null
. Esto no tiene ningún efecto en el objeto que solía apuntar, solo la referencia. Asimismo, no tiene ningún efecto sobre otras referencias que apuntan al mismo objeto.
Así que la referencia Thread.target
aún apunta al mismo objeto MyRunnable
que usted creó inicialmente, y desde el punto de vista del hilo, nada ha cambiado.
La única diferencia potencial es que su fragmento de código (externo) ya no tiene una referencia al objeto que creó. Entonces, el código que sigue no podrá invocar ningún método en ese objeto, ni pasarlo como un argumento de método, etc. (Esto no debería ser un problema, o sorprendente, dado que deliberadamente anuló su única referencia a ese objeto.)
Si nada contiene una referencia a un objeto en particular, entonces el recolector de basura en su próxima ejecución considerar ese objeto inalcanzable, y recogerlo. Sin embargo, esto rara vez es algo de lo que deba preocuparse, ya que si no tiene una referencia al objeto, no podrá hacer nada con él de todos modos (todo el principio detrás de GC).
En este caso, el MyRunnable
no será GCed porque el Thread
todavía contiene una referencia al mismo.
Dicho esto, si el constructor se comportara de manera diferente y no almacenar una referencia, ya que no necesitaba una (tal vez sólo utiliza la representación toString()
), entonces el objeto se considera inalcanzable, y sería ser recogida .En ambos casos, el recolector de basura haría lo correcto, recogiendo un objeto si y solo si nada se refiere a él más, sin que tengas que preocuparte o saber eso en tu código.
+1 Eche un vistazo a mi respuesta a continuación :) –
@ Eng.Fouad Brilliant :) ¡Muchas gracias! –
De nada. Además, eche un vistazo a mi respuesta aquí: http://stackoverflow.com/questions/9404625/java-pass-by-reference/9404727#9404727 –