Por lo que yo puedo entender a partir de los documentos java.lang.Thread
, y de otras preguntas publicadas aquí en stackoverflow, como "How to access a Runnable object by Thread?" y "Get current instance of Runnable" No es posible obtener una referencia del objeto incrustado en un Runnable
Thread
.¿Por qué no se puede incrustar Runnable en un subproceso?
Un escenario donde tener esta posibilidad sería útil es cuando se implementa un método, cuya firma no se puede modificar porque estamos anulando un método definido en otra clase o interfaz, y se requieren diferentes operaciones según el tipo de Runnable
incrustado en la corriente Thread
.
Si tenemos, por ejemplo, un método llamado getRunnable
en la clase Thread
podríamos hacer algo como esto:
if (Thread.currentThread().getRunnable() instanceof Type1) {
// do something...
} else {
// do something else...
}
Esto podría ser útil también en situaciones en las que queremos garantizar las operaciones contenidas en un método son ejecutado solo por ciertos hilos y no por otros.
Entonces, me preguntaba, ¿hay alguna razón específica por la que los desarrolladores de Java decidieron no permitir la instancia Runnable
de Thread
, o es una característica faltante que vale la pena notificar? Si cree que no hay razón detrás de esa elección, pero no vale la pena notificarla como característica faltante, ¿qué estrategia usaría en el escenario descrito anteriormente?
¿Cuál sería el "ejecutable" para el hilo principal con el método 'main'? –
@KirkWoll, 'null'? –
La ramificación en el resultado de 'instanceof' como lo hace en su ejemplo casi nunca es una buena idea. – NPE