timeout realisieren

Status
Nicht offen für weitere Antworten.

ARadauer

Top Contributor
ich kann ich eigentlich am einfachsten einen Timeout realisieren?


Java:
package timeout;

import java.util.concurrent.TimeoutException;

public class TimeoutTest {
   
   public static void main(String[] args) {
      long t = System.currentTimeMillis();      
      try {
         //aktion durchführen
         doSomehting();
         long dauer = System.currentTimeMillis()-t;
         System.out.println("Dauer: "+dauer+" ms");
      } catch (TimeoutException e) {
         System.out.println("zu lange...");
      }      
   }
   
   public static void doSomehting() throws TimeoutException{     
      //mache etwas... wenn wir nach x sekunden nicht fertig sind, wirf die Exception
      throw new TimeoutException();
   }
}

wie macht man das am besten? zwei threads? der eine überwacht den anderen und weißt ihn bei bedarf an abzubrechen?
 

tfa

Top Contributor
Auf jeden Fall mit Threads.
Im Concurrency-Framework gibt es schon solche Funktionalität: ExecutorService.invokeAny
Vielleicht ein wenig Overkill für nur einen Task...

Edit: invokeAny nicht invokeAll
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
mir kommt das auch so vor als wär das nicht der beste weg... ist doch etwas das man öfters brauchen kann. kann mir jemand ein beispiel geben, wie man sowas am besten macht?
 

tfa

Top Contributor
Beispiel geben wofür? Für den Weg, den du nicht so gut findest (mit ExecutorService)?
 

ARadauer

Top Contributor
Java:
package timeout;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;


public class TimeoutTest {

   public static void main(String[] args) {
      ExecutorService service = Executors.newSingleThreadScheduledExecutor();

      long t = System.currentTimeMillis();      
      try {

         Collection<Test> list =new ArrayList<Test>();
         list.add(new Test());         
         List<Future<String>> future = service.invokeAll(list, 1, TimeUnit.SECONDS);         

         if(future.get(0).isCancelled()){
            System.out.println("Timeout");
         }else{
            long dauer = System.currentTimeMillis()-t;
            System.out.println("Dauer: "+dauer+" ms");
         }
      } catch (InterruptedException e) {         
         e.printStackTrace();
      }      
   }

}

class Test implements Callable<String>{

   public String call() throws Exception {
      Thread.sleep(2000);
      return null;
   }

}
finde das mit der liste nicht sehr sauber, geht das nicht einfacher?
 

tfa

Top Contributor
Mit dieser Klasse geht's wohl nicht anders. Die Liste ist halt überflüssig für deinen Fall. Unsauber würde ich das aber nicht nennen.
Vielleicht findet ja noch jemand eine andere Lösung.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
O Timeout für eine Methode festlegen Java Basics - Anfänger-Themen 3
D Timeout für Methodenausführung? Java Basics - Anfänger-Themen 12
J Scanner Timeout Java Basics - Anfänger-Themen 3
M readXYZ von DataInputStream abbrechen/timeout auslösen Java Basics - Anfänger-Themen 6
D Eigenes Event beim TimeOut Java Basics - Anfänger-Themen 2
G ServerSocket: Exceptions und Timeout Probleme Java Basics - Anfänger-Themen 10
G Exception durch Timeout Java Basics - Anfänger-Themen 4
D Timeout Java Basics - Anfänger-Themen 6
M Spielerbewegungen realisieren Java Basics - Anfänger-Themen 2
A MouseMotionListener - wie Mausverfolgung und Neuzeichnen realisieren? Java Basics - Anfänger-Themen 12
H Frage um Eingbeaufforderung zu realisieren Java Basics - Anfänger-Themen 4
A Wie kann ich folgendes Projekt realisieren? Java Basics - Anfänger-Themen 4
L Methoden Methode mit drei Rückgabewerten realisieren Java Basics - Anfänger-Themen 3
L Schaltung realisieren Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Liste als Array realisieren Java Basics - Anfänger-Themen 23
J Mustererkennung realisieren Java Basics - Anfänger-Themen 10
Y chat programm im internet realisieren Java Basics - Anfänger-Themen 5
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
T 1:1 Beziehungen realisieren ? Java Basics - Anfänger-Themen 13
S Ausgabe realisieren Java Basics - Anfänger-Themen 2
S Grössere MenuBars realisieren Java Basics - Anfänger-Themen 7
D Java Programm mit Internetzugriff realisieren Java Basics - Anfänger-Themen 8
D Logging sätmlicher Vorgänge, wie am besten realisieren? Java Basics - Anfänger-Themen 6
G Physikalisches Problem realisieren Java Basics - Anfänger-Themen 11
G isEmpty selbst realisieren Java Basics - Anfänger-Themen 47
U Texteditor mit methoden realisieren Java Basics - Anfänger-Themen 13
A Beziehung 1-n in Java realisieren Java Basics - Anfänger-Themen 17
S Zeilenumbrüche realisieren Java Basics - Anfänger-Themen 6
I SaveFile Dialog - wie realisieren ? Java Basics - Anfänger-Themen 4
L Timer Swing realisieren Java Basics - Anfänger-Themen 4
P :shock: teilweises wurzelziehen realisieren Java Basics - Anfänger-Themen 9
R Zeitaufwand für Suchmaschine mit Lucene realisieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben