Frage

Ich habe einen festen Thread-Pool, an den ich Aufgaben übermittle (beschränkt auf 5 Verknüpfungen).Wie kann ich herausfinden, welcher von denen 5 threads führt meine Aufgabe aus (so etwas wie "Thread # 3 von 5 erledigt diese Aufgabe")?

ExecutorService taskExecutor = Executors.newFixedThreadPool(5);

//in infinite loop:
taskExecutor.execute(new MyTask());
....

private class MyTask implements Runnable {
    public void run() {
        logger.debug("Thread # XXX is doing this task");//how to get thread id?
    }
}
War es hilfreich?

Lösung

Verwenden von Thread.currentThread():

generasacodicetagpre.

Andere Tipps

Die akzeptierte Antwort beantwortet die Frage, dass Sie A -Thread-ID, aber es lässt Sie nicht "Threwing X of y" -Meldungen nicht "Faden-IDs sind über Threads eindeutig, starten jedoch nicht unbedingt von 0 oder 1.

Hier ist ein Beispiel, das der Frage entspricht:

generasacodicetagpre.

und die Ausgabe:

generasacodicetagpre.

Ein leichter Tweak mit modernem Arithmetik ermöglicht es Ihnen, "Thread X of y" richtig zu tun:

generasacodicetagpre.

Neue Ergebnisse:

generasacodicetagpre.

Sie können thread.getcurrentThread.getid () verwenden, aber warum möchten Sie das tun, wenn Logrecord Objekte, die vom Logger verwaltet werden, haben bereits die Thread-ID.Ich denke, Sie fehlen eine Konfiguration irgendwo, die die Thread-IDs für Ihre Protokollnachrichten protokolliert.

Wenn Ihre Klasse von erbt Thread, Sie können Methoden verwenden getName und setName um jeden Thread zu benennen.Andernfalls könnten Sie einfach eine hinzufügen name feld bis MyTask, und initialisiere es in deinem Konstruktor.

Wenn Sie Protokollierung verwenden, sind Thread-Namen hilfreich. Eine Thread-Fabrik hilft dabei:

generasacodicetagpre.

Ausgang:

generasacodicetagpre.

Es gibt den Weg des aktuellen Threads:

generasacodicetagpre.

Nachdem Sie das Thread-Klassenobjekt (t) erhalten haben, können Sie Informationen erhalten, die Sie benötigen, um Fadenklassenmethoden zu verwenden.

Faden-ID Getting:

generasacodicetagpre.

Thread-Name Getting:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top