Wie kann ich die Zuordnung einer Liste parallelisieren?

8

Das ist das Problem, das ich habe: Ich habe eine große Sequenz von einigen Objekten ( List<SomeClass> ) und möchte eine Operation für alle Elemente der Liste ausführen und eine neue Sequenz ( List<SomeOtherClass> ) erhalten.

Wie:

%Vor%

Da die Operation someOperation keine Nebenwirkungen hat und die Liste ziemlich groß ist, möchte ich diese Mapping-Operation parallelisieren.

Was wird der beste Weg sein, das in Java zu tun?

    
Grescent Mercury 04.06.2011, 17:23
quelle

6 Antworten

4

Eine mögliche Implementierung kann das Executor Framework ( Beispiel enthalten).

    
Howard 04.06.2011 17:27
quelle
1

Verwenden Sie Threading und partitionieren Sie Ihre Arbeit mit Unterlisten.

    
Marcelo 04.06.2011 17:29
quelle
1

Teilen Sie die Eingabeliste, und verwenden Sie die FutureTask-Aufgabe, und führen Sie dann die Ergebnisse zusammen

    
Op De Cirkel 04.06.2011 17:30
quelle
0

So mache ich es normalerweise:

%Vor%

someOperation ist dann als aufrufbar definiert

%Vor%

Hinweis: Ich hatte keine try - catch Blöcke hier, aber Sie müssen welche haben. shutdown sollte im Block finally sein. Ich kann mich einfach nicht erinnern, was einen Geldautomaten auslöst, deine IDE sollte dir dabei helfen.

    
trutheality 04.06.2011 17:48
quelle
0

Doug Leas jsr166y enthält das Fork / Join-Framework, das perfekt für diese Art von Dingen ist . Es ist für die parallele Zerlegung von CPU-intensiven Jobs wie diesem ausgelegt und ist sehr effizient darin.

Wahrscheinlich der einfachste Weg, es zu benutzen, ist jedoch mit der neuen Scala 2.9 parallele Sammlungen , da es seine Verwendung vollständig abstrahiert (um eine parallele Sammlung in Scala zu erhalten, fügen Sie einfach .par am Ende hinzu).

Beide Lösungen haben viele Tutorials und Beispiele, die über Google verfügbar sind.

    
Jed Wesley-Smith 04.06.2011 22:35
quelle
-2

Wenn Sie sicher sind, dass keine Nebeneffekte auftreten, verwenden Sie einfach Threading. Natürlich können Sie Threading verwenden, wenn es Nebenwirkungen gibt. In diesem Fall müssen Sie jedoch einige Mechanismen zum Sperren und Synchronisieren verwenden.

Ein sehr einfaches Thread-Beispiel aus Bruce Eckels ausgezeichnetem Buch Thinking in Java:

%Vor%     
Farshid Zaker 04.06.2011 17:26
quelle

Tags und Links