---
title: 'TaskExecutor und java.util.concurrent.Executor in Spring 2'
url: 'https://tutego.de/blog/javainsel/2007/01/taskexecutor-und-java-util-concurrent-executor-in-spring-2'
markdown: 'https://tutego.de/blog/javainsel/2007/01/taskexecutor-und-java-util-concurrent-executor-in-spring-2.md'
date: '2007-01-31'
description: 'Seit Java 5 gibt es mit dem Executor (JSR 166) eine Schnittstelle für „Ausführer“ von Runnable-Objekten. Spring bietet mit dem TaskExecutor die gleiche Schnittstelle. – So steht die Funktionalität auch für Java 1.4 und Java 1.3 und auch für Java EE Umgebungen zur Verfügung. org.springframework.core…'
taxonomy:
  category:
    - Allgemein
---

# TaskExecutor und java.util.concurrent.Executor in Spring 2

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## TaskExecutor und java.util.concurrent.Executor in Spring 2

31.01.2007 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Seit Java 5 gibt es mit dem `Executor` (JSR 166) eine Schnittstelle für „Ausführer“ von `Runnable`-Objekten. Spring bietet mit dem TaskExecutor die gleiche Schnittstelle. – So steht die Funktionalität auch für Java 1.4 und Java 1.3 und auch für Java EE Umgebungen zur Verfügung. `org.springframework.core.task.TaskExecutor`: void `execute( Runnable task )`

Die TaskExecutor im Überblick

SimpleThreadPoolTaskExecutor – `Thread`-Pool durch Quartz’s SimpleThreadPool. SimpleAsyncTaskExecutor – Erzeugt pro Anfrage einen neuer `Thread`. Es gibt eine optionale maximale Größe. SyncTaskExecutor – Führt `Runnable` im aktuellen `Thread` aus. Erzeugt also keinen neuen `Thread` zur Nebenläufigkeit. ConcurrentTaskExecutor – Ein Wrapper zum `java.util.concurrent.Executor` von Java 5. ThreadPoolTaskExecutor – Geht direkt auf den `java.util.concurrent.ThreadPoolExecutor` von Java 5. Ermögicht Anpassung der Properties „`corePoolSize`“, „`maxPoolSize`“, „`keepAliveSeconds`“, „`queueCapacity`“. TimerTaskExecutor – Nutzt einen `java.util.Timer` zur Ausführung. Der `Runnable` wird als TimerTask hintereinander durch den Timer-`Thread` ausgeführt. WorkManagerTaskExecutor – Nutzt CommonJ WorkManager als Implementierung. Ermöglicht Ausführung auf Applikationsservern von BEA und IBM.

Beispiel für TaskExecutor

```java
public class DoItExecutor
{
 private TaskExecutor executor;
```

public `DoItExecutor`( TaskExecutor executor )

```java
 {
 this.executor = executor;
 }

 public void doIt()
 {
 Runnable run = new Runnable() {
 public void run() {
 System.out.println( Thread.currentThread() );
 }
 };

 executor.execute( run );
 executor.execute( run );
 }
}
```

Injizierung vom TaskExecutor

```java
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
 <property name="corePoolSize" value="5″ />
 <property name="maxPoolSize" value="10″ />
 <property name="queueCapacity" value="25″ />
</bean>

<bean id="doItExecutor" class="DoItExecutor">
 <constructor-arg ref="taskExecutor" />
</bean>
```

„Fehlende“ Typen aus Java 5

Spring bietet unterschiedliche Implementierungen für den TaskExecutor, aber Java 5 bietet außer `execute()` im `Executor` noch mehr. Der `java.util.concurrent.ThreadPoolExecutor` implementiert mehr als nur `Executor`, nämlich ExecutorService. Das bietet – `awaitTermination()`, `invokeAll()`, `invokeAny()`, `isShutdown()`, `isTerminated()`, `shutdown()`, `shutdownNow()`, `submit()`– mit weiteren Typen wie `Future`, `Callable`. Spring bietet dafür bisher keine Abstraktion!

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [SimpleJdbcTemplate aus Spring 2.0](https://tutego.de/blog/javainsel/2007/01/simplejdbctemplate-aus-spring-2-0.md)
