Threads Abarbeitungsstatus von Threads in Datei schreiben

skummy

Aktives Mitglied
Hallo,

folgender Beispiel-Code:
Java:
	    ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(8);
	    for (int i = 0; i < 8; i++) {
		Runnable worker = new PDFCreateWorker(i);
		// Add to queue
	    	executor.execute(worker);
            }

        while (!executor.isTerminated()) {

        }

Funktioniert wunderbar.

Jetzt meine Frage:

Wie stelle ich am Besten an, dass der Abarbeitungsstand der einzelnen Threads in eine Datei geschrieben wird? In der Datei muss nur ein Wert hochgezählt werden. Es interessiert also nur, wann genau ein Thread fertig ist.

Dafür könnte ich in der while-Schleife folgendes machen:

Java:
 long completeTmp = 0;
 boolean show = true;
while (!executor.isTerminated()) {
		if(show) {
		   System.out.println(executor.getCompletedTaskCount());
		}
		if(complete == completeTmp) { 
		    show = false;		
		} else {
		    show = true;
		    completeTmp++;
		}
}

Würdet ihr diese Vorgehensweise empfehlen? Statt dem System.out würde hier natürlich der Wert in der Datei geändert.

Oder soll ich jedem Thread das öffnen/schreiben in der Datei überlassen, nachdem die Haupt-Logik abgearbeitet wurde? Das Öffnen und schreiben sollte dann natürlich in einen synchronized-Block rein...


Wofür ich das brauche? Ich möchte eine einfache Fortschrittsanzeige über ein AJAX-Request realisieren.

Grüße
 
Ich würde das so machen, wie in Deinem Codebeispiel. Wie Du in Files schreibst weißt Du?
skummy hat gesagt.:
Oder soll ich jedem Thread das öffnen/schreiben in der Datei überlassen, nachdem die Haupt-Logik abgearbeitet wurde? Das Öffnen und schreiben sollte dann natürlich in einen synchronized-Block rein...
Davon würde ich abraten. Der Executor ist die Steuerinzanz mit der Übersicht über alles nicht der einzelne Thread. Außerdem nimmst Du Deinem Programm ein Stück Parallelität, weil die Threads wegen des Zugriffs auf das gemeinsame Logfile möglicherweise aufeinander warten müssten.
 
Okay, alles klar 🙂!

Ich würde das so machen, wie in Deinem Codebeispiel. Wie Du in Files schreibst weißt Du?

Ja, das sollte ich hinbekommen ;-). Als Datei-Name verwende ich am Besten die Session-ID des Benutzers oder sollte ich nochmal was anderes zufälliges generieren lassen?

Unabhängig davon markiere ich die Sache hier mal als erledigt...danke für deine Hilfe 🙂!
 

Zurück
Oben