2016-05-20 9 views
0

Ich habe zwei Ordner, die mehrere CSV-Dateien enthalten. Ordner 1 verfügt über mehrere CSV-Dateien und Ordner 2 verfügt über mehrere CSV-Dateien. Unter bestimmten Bedingungen vergleiche ich csv-Dateien (Code, der in compareCSV vorhanden ist (Datei f1, Datei f2)) und schreibe in eine neue Ausgabedatei.Datenverarbeitung mit Multithreading-Java

Jetzt möchte ich Multithreading in Java verwenden, so dass ich mehrere Dateien gleichzeitig verarbeiten kann. Nach meinem Verständnis, wenn wir Funktion comapareCSV (Datei f1, Datei f2) mit mehreren Threads aufrufen könnte, dann sollte ich mein Ziel erreichen. Die Anzahl der Threads muss vom Benutzer festgelegt werden. Aber bedenken Sie numberofThreads = 5

Gibt es irgendwelche Funktionen/Klassen, die in Java vorhanden sind, die mein Problem lösen können?

Ich habe versucht, ThreadPool zu verwenden, und ich konnte in meinem Fall nicht implementieren. Wie kann ich in meinem Fall auch ExecutorService verwenden?

Antwort

1

Wenn Sie nicht mehr als eine Festplatte haben, wird die Parallelisierung des Prozesses nicht beschleunigt, da Ihr Betrieb im Wesentlichen E/A-Operationen unterliegt - dies würde wahrscheinlich sogar die Leistung beeinträchtigen.

Unter der Annahme, dass mehr als ein Thread mit Leistung verbessern kann, können Sie einfach tun:

ExecutorService executor = Executors.newFixedThreadPool(5); 

executor.submit(() -> compareCSV(f1, f2)); 
executor.submit(() -> compareCSV(f3, f4)); 
executor.submit(() -> compareCSV(f5, f6)); 
executor.submit(() -> compareCSV(f7, f8)); 

und das Verfahren wird parallel ausgeführt werden (Sie werden wahrscheinlich die Dateien in irgendeiner Sammlung speichern wollen und eine Schleife verwenden aber du hast die Idee).

+0

Danke für Ihre Hilfe. Das funktioniert. Außer dass executor.shutdown() nach dem Abschluss aufgerufen werden muss. – Chetan

Verwandte Themen