# Unterschied zwischen ThreadPoolExecutor und Executor Service



## Osix2000 (14. Aug 2007)

Thema Multithreading mit Java Concurrency API ab JDK 1.5: 

Kann mir mal jemand sagen, was der

Unterschied zwischen ThreadPoolExecutor und ExecutorService ist ?

Außerdem hätte ich gerne ein gutes Buch zu Java Concurrency, aber bitte auf DEUTSCH....

Oder Links auf ein gutes KOMPLETTES Beispiel für beide Varianten


----------



## jPat (14. Aug 2007)

:###


----------



## osix2000 (15. Aug 2007)

Es reicht auch, wenn mir jemand kurz den Unterschied zwischen beiden obigen genannten Dingen erklärt....
Aber ich sehe schon, die Concurrency API ist nagelneu, das kennen noch wenige....

Macht nix...


----------



## byte (15. Aug 2007)

ExecutorService ist das Interface, das die konkrete Klasse ThreadPoolExecutor implementiert. Zweiteres braucht Dich aber nicht zu interessieren. Du holst Dir die gewünschte Implementierung über die Klasse Executors.



			
				osix2000 hat gesagt.:
			
		

> Aber ich sehe schon, die Concurrency API ist nagelneu, das kennen noch wenige....



Naja, Java 5 gibts wie lange? Seit 1.5 Jahren?


----------



## Osix2000 (15. Aug 2007)

es ist doch grade umgekehrt, oder 

ExecutorService ist die Richtlinie und ThreadPoolExecutor ist die Klasse, die diese Richtline implementiert und die ich verwenden muß weil sie alles zur Verfügung stellt, was ich brauche, oder ?

Was meinst Du denn mit "Executor" ?


----------



## byte (15. Aug 2007)

Also nochmal:

ExecutorService ist ein Interface. ThreadPoolExecutor implementiert dieses Interface. Statt aber ein Objekt vom Typ ThreadPoolExecutor direkt per Konstruktor zu erzeugen, benutzt Du die entsprechende Factory Method aus der Klasse Executors (nicht zu verwechseln mit Executor). Somit braucht Dich die konkrete Implementierung der ExecutorServices nicht zu interessieren. Du arbeitest ausschließlich polymorph auf dem Interface.



			
				ThreadPoolExecutor hat gesagt.:
			
		

> An ExecutorService that executes each submitted task using one of possibly several pooled threads, normally configured using Executors factory methods.



Beispielcode:


```
ExecutorService service = Executors.newCachedThreadPool();
Runnable task = ...;
service.submit(task);
```


----------



## osix2000 (15. Aug 2007)

...außschließlich polymorph auf dem Interface.....

urgxxl.... kannst Du bitte kurz erklären was das heißt...
Ich denke, daß interessiert auch noch andere, die den Faden hier lesen...

Das heißt die Methode .execute() gehört ganz speziell zum TreadpoolExecutor, oder ?

Und analog dazu gibt es die Methode .submit() die ich dann verwende....

Und warum verwende ich nicht gleich den ThreapoolExecutor

so nach dem Motto


```
ThreadPoolExecutor tpe = new ThreadPoolExecutor();

.
.
tpe.execute(task[i]);
.
.
.
```

Was ist der Vorteil von service.submit() ???


----------



## byte (15. Aug 2007)

Offenbar hast Du eine der Kernkonzepte objektorientierter Programmierung noch nicht verstanden. Polymorphie sollte eigentlich Bestandteil jedes vernünftigen Java-Grundlagenbuches sein.

Ansonsten habe ich mal das für Dich ergooglet: http://www.galileocomputing.de/openbook/oo/oo_02_basisderobjektorientierung_002.htm


Wenn Du danach noch konkrete Fragen hast, kannst Du sie gerne stellen.


----------

