Executorservice stoppt arbeit

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:
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
 
E

ExecUser

Gast
Ok ich weiß jetzt wo das Problem liegt, allerdings weiß ich nicht
wie ich es beheben kann.

Und zwar ist das mal wieder so, dass der Hauptthread viel viel schneller
durch ist als die anderen Threads.

Der HauptThread holt alle Elemente aus der Queue und startet sie und
sagt dann er hat keine Elemente mehr, er würde allerdings noch welche bekommen
....

hmmm... thread.sleep() einbauen?
 

kay73

Bekanntes Mitglied
Ist Deine Queue eine Klasse, die BlockingQueue implementiert?

- Verwende nicht poll() sondern take().
- Verlagere das Auslesen/Entnehmen aus der Queue in einen separaten Thread. Endlosschleife, flag fuer das Beenden und
Code:
catch
Handler mit
Code:
break;[/c] in dem das Ende-Flag geprueft wird.
- Unterbreche/[code]interrupt()
e o. g. separaten Thread aus dem Hauptthread, wenn die Bedingung fuer das Beenden der Anwendung erfuellt ist.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
O ExecutorService: ThreadGroup zuweisung? Java Basics - Anfänger-Themen 2
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
F ExecutorService und offene Threads Java Basics - Anfänger-Themen 3
E ExecutorService pausieren Java Basics - Anfänger-Themen 3
E ExecutorService warten bis alles fertig? Java Basics - Anfänger-Themen 5
E Executorservice abbrechen? Java Basics - Anfänger-Themen 2
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
U THREAD stoppt bzw. schläft nicht!!!! Java Basics - Anfänger-Themen 12
G iteration durch Array stoppt nicht bei Laufbedingung? Java Basics - Anfänger-Themen 13
K Sound stoppt nicht Java Basics - Anfänger-Themen 3
K Midi stoppt trotz stop button nicht Java Basics - Anfänger-Themen 3
G Textdatei, Programm stoppt nicht Java Basics - Anfänger-Themen 4
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
S arbeit mit rationalen zahlen Java Basics - Anfänger-Themen 2
O Arbeit mit leeren Datensätzen / Objekten? Java Basics - Anfänger-Themen 5
M Libraries für Arbeit mit Excel (Alternativen) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben