Ich mach Einstieg in Thread, daher wollte gern fragen, ob ich hier alles richtig gemacht habe.
Also wenn ich diese Method aufrufe, macht alles was gewünscht ist, aber mit Thread hatte ich vorher nicht viele Erfahrung. Daher wenn euch irgendwas auffällt, was ich nicht sehen kann, und mir Anmerkungen geben, würde ich so verbessern...
In Bezug auf die Threads sieht das prinzipiell nicht falsch aus (wobei die Berechnung in thread3 etwas kompliziert anmutet). Das Problem lässt sich gut und einfach parallelisieren, weil es in disjunkte Teilprobleme geteilt werden kann.
Allerdings hast Du mehrfach den gleichen Code im Programm stehen, der sich nur im von-/bis-Index unterscheidet: mach 'ne Klasse draus und erzeuge Instanzen davon (EDIT: und verwende System.arraycopy).
In Bezug auf die Threads sieht das prinzipiell nicht falsch aus (wobei die Berechnung in thread3 etwas kompliziert anmutet). Das Problem lässt sich gut und einfach parallelisieren, weil es in disjunkte Teilprobleme geteilt werden kann.
Allerdings hast Du mehrfach den gleichen Code im Programm stehen, der sich nur im von-/bis-Index unterscheidet: mach 'ne Klasse draus und erzeuge Instanzen davon (EDIT: und verwende System.arraycopy)
Was die Berechnung angeht, die gegeben Menge sind immer unterschiedlich, die ich dann in vier Array aufteilen muss… wie könnte man einfacher schreiben. Mir kommt mehr keine Idee, im Bezug auf die Berechnung
Eine Möglichkeit: Du willst x Threads verwenden, daher teilst Du ein Array der Größe n in x Teile. Die ganzzahlige Division n/x ergibt somit die Zahl der Elemente eines Teils, wobei der letzte Teil größer sein kann.
Skizze:
Java:
Thread[] threads =newThreads[4];int m = files.length / threads.length;for(int i =0; i < threads.length; i++){int from = m*i;intto=(i+1== threads.length)? files.length : from + m;
threads[i]=newThread(newWorker(files, from,to));
threads[i].start();}for(int i =0; i < threads.length; i++){
threads[i].join();}
Eine Möglichkeit: Du willst x Threads verwenden, daher teilst Du ein Array der Größe n in x Teile. Die ganzzahlige Division n/x ergibt somit die Zahl der Elemente eines Teils, wobei der letzte Teil größer sein kann.
Skizze:
Java:
Thread[] threads =newThreads[4];int m = files.length / threads.length;for(int i =0; i < threads.length; i++){int from = m*i;intto=(i+1== threads.length)? files.length : from + m;
threads[i]=newThread(newWorker(files, from,to));
threads[i].start();}for(int i =0; i < threads.length; i++){
threads[i].join();}
Und write(doc); in jedem Thread kann problematisch werden, wenn da etwas da passiert was nicht mehrmals gleichzeitig passieren darf, zB in eine Datei zu schreiben
Und write(doc); in jedem Thread kann problematisch werden, wenn da etwas da passiert was nicht mehrmals gleichzeitig passieren darf, zB in eine Datei zu schreiben