Crearía un hilo que enumera continuamente todos los hilos en ejecución en la JVM.
Luego, cada vez que notifique que ha aparecido un nuevo hilo, notificará de alguna forma una clase en su código.
Éstos son algunos enlaces sobre cómo enumerar todos los temas actualmente se ejecuta en la JVM:
Get a List of all Threads currently running in Java
Listing All Running Threads
========= ===
Un código de inicio:
ThreadCreationListener.java
public interface ThreadCreationListener {
public void onThreadCreation(Thread newThread);
}
ThreadCreationMonitor.java
public class ThreadCreationMonitor extends Thread {
private List<ThreadCreationListener> listeners;
private boolean canGo;
public ThreadCreationMonitor() {
listeners = new Vector<ThreadCreationListener>();//Vector class is used because many threads may use a ThreadCreationMonitor instance.
canGo = true;
// Initialize the rest of the class here...
}
// Most important methods
public void addListener(ThreadCreationListener tcl) {
listeners.add(tcl);
}
public void removeListener(ThreadCreationListener tcl) {
listeners.remove(tcl);
}
public void run() {
List<Thread> runningThreads;
List<Thread> lastRunningThreads;
while(canGo) {
// Step 1 - List all running threads (see previous links)
// runningThreads = ...
// Step 2 - Check for new threads and notify all listeners if necessary
if (runningThreads.removeAll(lastRunningThreads)==true) {
for(Thread t : runningThreads) {
for(ThreadCreationListener tcl : listeners) {
tcl.onThreadCreation(t);//Notify listener
}
}
}
}
}
public void shutdown() {
canGo = false;
}
}
MyThreadInfoConsumer.java
public class MyThreadInfoConsumer implements ThreadCreationListener {
public void onThreadCreation(Thread newThread) {
// Process here the notification...
}
}
Main.java
public class Main {
public static void main(String[] args) {
ThreadCreationMonitor tcm = new ThreadCreationMonitor();
tcm.start();
MyThreadInfoConsumer myTIC = new MyThreadInfoConsumer();
tcm.addListener(myTIC);
// rest of your code...
// Don't forget to call tcm.shutdown() when exiting your application !
}
}
Si registra un 'ClassLoader' en el hilo principal, es de esperar que sea heredado por todos los hilos nuevos, y con suerte, cualquier hilo tendrá que cargar alguna clase, lo que significa que su' ClassLoader' será consultado y tendrá una oportunidad para registrar el hilo .... – Saintali
Iría por el camino de extender 'Thread' con los métodos requeridos para los oyentes. Por supuesto, funcionará solo para tu código. – SJuan76
Necesita hacer un seguimiento de la transición (como: "En este momento se ha creado un nuevo subproceso y tengo que reaccionar de inmediato") o es suficiente tener una lista o algo de subprocesos creados en/por su aplicación en puntos específicos en el tiempo (como: "Ahora quiero saber los hilos y hacer algo con ellos"). – Fildor