mdg2004 Geschrieben 26. Juni 2009 Geschrieben 26. Juni 2009 Hallo alle zusammen, ich habe folgendes Problem: Ich habe eine Reihe von Aufgaben / Tasks. Sagen wir 100 Stück. (Hatte vor diese über Runable Objekte zu realisieren.) Diese möchte ich nun parallel in "5er-Paketen" via 5 Threads abarbeiten. Immer wenn einer dieser 5 Threads frei wird, also dessen momentan zugeordneter Task terminiert, soll ein neuer Task nachrücken, sodass stets 5 parallel am Laufen sind. Wie realisiere ich so etwas am besten ? Mit einem ThreadPool und einer Art Queue? Ich steh gerade ein bisschen aufm Schlauch ... könnt ihr mir einen Tipp geben, was genau ich suche? Vielen Dank schonmal! Gruß mdg2004 Zitieren
flashpixx Geschrieben 26. Juni 2009 Geschrieben 26. Juni 2009 evtl schaust Du Dir das mal an ThreadGroup (Java 2 Platform SE v1.4.2) Aber was mich im Moment stört, dass Du immer 5 aktive Tasks haben willst und diese als Gruppe betrachteten möchtest. Mir ist der Zweck davon nicht klar. Warum 5 und nicht 10 oder 2. Vielleicht beschreibst Du mal die Problemstellung, damit evtl darüber nachdenken kann Phil Zitieren
mdg2004 Geschrieben 26. Juni 2009 Autor Geschrieben 26. Juni 2009 Danke. Die Zahl ist nur ein Bsp. - es spielt eigentlich keine Rolle, wie viele es sind. 5 nehme ich deswegen, weil ich schätze das 5 meiner Tasks meinen Server genug auslasten / nicht überlasten würden. (Es werden Daten heruntergeladen, geparsed und weiterverarbeitet in so einem Task.) Zitieren
perdian Geschrieben 29. Juni 2009 Geschrieben 29. Juni 2009 könnt ihr mir einen Tipp geben, was genau ich suche?Du suchst die Java Concurrency Utilities. Zitieren
flashpixx Geschrieben 29. Juni 2009 Geschrieben 29. Juni 2009 Ich will einmal zu bedenken geben, wirklich gut über die "Parallelisierung" nachzudenken. Nur weil es parallel verarbeitet wird, ist es nicht schneller. Um eine gute Parallelisierung zu erreichen, solltest Du Dein Problem zunächst wirklich umfassend analysieren, denn z.B. wenn Du irgendwo einen Datenaustausch (Mutex) zwischen zwei Tasks hast, kann Dir das unter Umständen jeden Performancegewinn wieder zu nichte machen Phil Zitieren
mdg2004 Geschrieben 29. Juni 2009 Autor Geschrieben 29. Juni 2009 Ich habe jetzt den hier verwendet: ThreadPoolExecutor (Java Platform SE 6) Vielen Dank für eure Tipps! Gruß MdG2004 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.