Um einen neuen Thread zu starten der ein Ergebniss asynchron liefert, gibt es seit Java 1.5 die Schnittstelle Callable
.
Was muss getan werden?
-Die Klasse mit dem Ergebniss muss Callable
implementieren und V call() throws Exception
überschreiben.
-Evl. im Konstruktor der Ergebniss Klasse Parameter mitgeben.
-Dann den Excecutor anlegen ExecutorService executor = Executors.newCachedThreadPool();
-Einen neuen Überwachungs Thread starten mit Future> erg = executor.submit(ergebnisKlasse)
.
Würde man Future> erg = executor.submit(u).get()
verwenden würde eine synchrone abarbeitung des Threads erfolgen. Das heißt es würde die weitere Bearbeitung solange geblockt, bis der Thread fertig ist.
-Mit erg.get(1, TimeUnit.SECONDS)
wird das Ergebnis des Threads geliefert oder aber wenn die angegebenen Zeit abgelaufen ist wird
eine TimeoutException
geworfen.
-Mit erg.isDone()
kann abgefragt werden ob der Thread fertig ist oder nicht