---
title: 'Q&A: Wie kann man einem Thread eine bestimmte Zeit zur Ausführung geben?'
url: 'https://tutego.de/blog/javainsel/2013/08/qa-wie-kann-man-einem-thread-eine-bestimmte-zeit-zur-ausfhrung-geben'
markdown: 'https://tutego.de/blog/javainsel/2013/08/qa-wie-kann-man-einem-thread-eine-bestimmte-zeit-zur-ausfhrung-geben.md'
date: '2013-08-04'
description: 'Eine Idee ist, nicht einen eigenen Thread selbst zu starten — was man sowieso nicht so oft macht — sondern einen ThreadPool aus Java 5 mit einzusetzen (Executors#newCachedThreadPool() ), der einen Executer (ExecutorService) implementiert. Der ExecutorService hat eine Funktion submit(Runnable task),…'
taxonomy:
  category:
    - Allgemein
---

# Q&A: Wie kann man einem Thread eine bestimmte Zeit zur Ausführung geben?

![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/)

## Q&A: Wie kann man einem Thread eine bestimmte Zeit zur Ausführung geben?

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

Eine Idee ist, nicht einen eigenen `Thread` selbst zu starten — was man sowieso nicht so oft macht — sondern einen ThreadPool aus Java 5 mit einzusetzen (`Executors`\#`newCachedThreadPool()` ), der einen Executer (`ExecutorService`) implementiert. Der `ExecutorService` hat eine Funktion `submit(Runnable task)`, die ein `Future` liefert. Mit diesem `Future` arbeitest du dann mit `get(long timeout, TimeUnit unit)`.

Code:

```java
package com.tutego;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ExitAfterATime
{
  public static void main( String[] args )
  {
      ExecutorService es = Executors.newCachedThreadPool();
      Future submit = es.submit( new Runnable() {
        @Override public void run()
        {
          try { Thread.sleep( 2000 ); } catch ( InterruptedException e ) { System.out.println("InterruptedException"); }
        } } );

      try
      {
        submit.get( 500, TimeUnit.MILLISECONDS );
      }
      catch ( InterruptedException e )
      {
      }
      catch ( ExecutionException e )
      {
      }
      catch ( TimeoutException e )
      {
        System.out.println( "Canceling" );
        submit.cancel( true );
        System.out.println( "Canceling Done" );
      }

      es.shutdownNow();
  }
}
```

Es gibt noch andere Lösungen und das concurrent Paket bietet viele Möglichkeiten. Der Programmcode muss aber mitspielen und auch beendet werden können, also `cancel(…)` unterstützen.

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

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

---

## Navigation

- Previous: [java-forum.org und Burger King](https://tutego.de/blog/javainsel/2013/08/java-forum-org-und-burger-king.md)
- Next: [Q&A: Wie kann man die Foreign Keys einer Tabelle rausfinden](https://tutego.de/blog/javainsel/2013/08/qa-wie-kann-man-die-foreign-keys-einer-tabelle-rausfinden.md)
