E
ExecUser
Gast
Tag Leute,
Ich habe ein problemchen mit nem ExecutorService. Ich schreib euch erstmal
den groben Code auf (Das Programm ist viel zu groß als das ich alles posten könnte):
run-methode des mainthreads:
doWork-Methode:
Die AnotherClass:
So zur Beschreibung:
- Ich entnehme einer Queue aus meinem Hauptthread ein Element.
- Ich instanziiere eine neue Klasse (Anotherclass) und übergebe ihr eine Referenz zu der Klasse mit dem Hauptthread und das Element das ich entnommen habe.
- Daraufhin wird mit dem Element gearbeitet und der Queue aus dem Hauptthread weitere Elemente hinzugefügt.
So und jetzt kommts, wenn meine AnotherClass jetzt fertig ist sollte der ExecutorService doch
das nächste Element entnehmen und mit dem loslegen oder nicht?
Er macht aber nicht weiter. Er führt alle Operationen mit den elementen aus, die von anfang
an in der Queue waren, nicht aber mit denen, die hinterher zur Queue hinzugefügt worden sind.
Weiß da einer Rat?
Grüße
Ich habe ein problemchen mit nem ExecutorService. Ich schreib euch erstmal
den groben Code auf (Das Programm ist viel zu groß als das ich alles posten könnte):
run-methode des mainthreads:
Java:
public void run() {
System.out.println("Starte Programm");
setAmountCores(Runtime.getRuntime().availableProcessors());
exec = Executors.newFixedThreadPool(getAmountCores());
while(!myQueue.isEmpty()) {
doWork(myQueue.poll());
}
exec.shutdown();
while(!exec.isTerminated()) {
try {
exec.awaitTermination(60, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
doWork-Methode:
Java:
private void crawl(Element nextElement) {
if(forbidden.contains(nextElement)) {
return;
} else {
AnotherClass class = new AnotherClass(this, nextElement);
getExec().execute(class);
}
}
Die AnotherClass:
Java:
public class AnotherClass implements Runnable {
// konstruktor ist wohl logisch ;)
public void run() {
// Eine Menge arbeit wird hier durchgeführt aber das klappt alles
MainClass.getQueue.offer(Element);
// Wenn er fertig ist ist das gewünschte passiert
}
}
So zur Beschreibung:
- Ich entnehme einer Queue aus meinem Hauptthread ein Element.
- Ich instanziiere eine neue Klasse (Anotherclass) und übergebe ihr eine Referenz zu der Klasse mit dem Hauptthread und das Element das ich entnommen habe.
- Daraufhin wird mit dem Element gearbeitet und der Queue aus dem Hauptthread weitere Elemente hinzugefügt.
So und jetzt kommts, wenn meine AnotherClass jetzt fertig ist sollte der ExecutorService doch
das nächste Element entnehmen und mit dem loslegen oder nicht?
Er macht aber nicht weiter. Er führt alle Operationen mit den elementen aus, die von anfang
an in der Queue waren, nicht aber mit denen, die hinterher zur Queue hinzugefügt worden sind.
Weiß da einer Rat?
Grüße