Main /

Java Threads Mit Future Objekten

Java Threads Mit Future Objekten

Früher(:tm:) war es kompliziert eine Aufgabe an einen Thread zu delegieren, wenn man auch noch ein Ergebnis haben wollte. Da brauchte man ein Runable Objekt und das Ergebnis musste auch irgendwo abgelegt werden dann mußte man auch noch auf die Threads warten...

Heute:

  • Man legt sich ein Callable<T> an, das nur eine Methode implementiert. T call()
  • Erzeugt einen ExecutorService dem sollte man tunlichst sagen, wie viele Threads man gedenkt zu starten, man kann auch einen nehmen, dann werden alle Threads brav hintereinander gestartet.
  • Man übergibt sein Callable mittels submit() an den Service und bekommt ein Future<T> Objekt zurück.
  • Dann geht man bei und fragt das Future Objekt nach seinem Wert per T get()
 class MyThread? implements Callable<String> {
   @Override 
   public String call() throws Exception {
      // Mach hier was wichtiges im Thread
      return "Ergebnis";
   }  
 }

 @Test
public void testMyThread() {
   ExecutorService? executor = Executors.newFixedThreadPool(1);
   Future<String> future = executor.submit(new MyThread?());
   String value = future.get();
   executor.shutdown();

   Assert.assertEquals("Ergebnis", value);
 }

Schon läuft das MyThread Objekt im eigenen Thread. Die future.get() wartet so lange, bis die Funktion call() zurückkommt. Das ist alles.

Das geht mit beliebig vielen Objekten, na schön, irgendwann gibt irgendetwas auf...

Frische Änderungen | Menü editieren
zuletzt geändert am 20.03.2014 14:02 Uhr von Lars
Edit Page | Page History