Ich würde einen Thread erstellen, der fortlaufend alle laufenden Threads auf der JVM auflistet.
Jedes Mal, wenn ein neuer Thread angezeigt wird, würde er auf diese Weise eine Klasse in Ihrem Code melden.
Hier sind einige Links, wie alle Threads momentan auf der JVM läuft zur Liste:
Get a List of all Threads currently running in Java
Listing All Running Threads
========= ===
Ein Startcode:
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 !
}
}
Wenn Sie einen 'ClassLoader' im Hauptthread registrieren, wird er hoffentlich von allen neuen Threads übernommen, und hoffentlich muss jeder Thread eine Klasse laden, was bedeutet, dass Ihr' ClassLoader' konsultiert wird und Sie haben eine Gelegenheit, den Thread zu registrieren .... – Saintali
Ich würde auf dem Weg der Erweiterung 'Thread' mit den erforderlichen Methoden für Hörer gehen. Natürlich funktioniert nur für Ihren Code. – SJuan76
Müssen Sie den Übergang verfolgen (wie: "Im Moment wurde ein neuer Thread erstellt und ich muss sofort darauf reagieren") oder ist es genug, um eine Liste oder etwas von Threads in/durch Ihre Anwendung erstellt zu haben bestimmte Zeitpunkte (wie: "Jetzt möchte ich die Threads kennen und etwas mit ihnen machen.")? – Fildor