Altro
Come impostare un timer in Java?
Come impostare un timer, diciamo per 2 minuti, per provare a connettersi a un database e poi lanciare un'eccezione se c'è qualche problema di connessione?
140
3
Quindi la prima parte della risposta è come fare ciò che l'argomento chiede, dato che questo era il modo in cui l'ho interpretato inizialmente e che alcune persone sembravano trovare utile. La domanda è stata poi chiarita e ho esteso la risposta per affrontarla.
Impostare un timer
Per prima cosa è necessario creare un Timer (io sto usando la versione
java.util
qui):..
Per eseguire il compito una volta si dovrebbe fare:
Per far ripetere il compito dopo la durata si fa:
Fare il timeout di un compito
Per fare specificamente ciò che la domanda chiarita chiede, cioè tentare di eseguire un compito per un dato periodo di tempo, si potrebbe fare quanto segue:
Questo verrà eseguito normalmente con eccezioni se il compito viene completato entro 2 minuti. Se viene eseguito più a lungo di così, verrà lanciata la TimeoutException.
Un problema è che anche se si otterrà una TimeoutException dopo i due minuti, il compito continuerà effettivamente a funzionare, anche se presumibilmente una connessione al database o alla rete finirà per scadere e lanciare un'eccezione nel thread. Ma siate consapevoli che potrebbe consumare risorse fino a quando ciò accade.
Usa questo
Ok, penso di aver capito il tuo problema ora. Puoi usare un Future per provare a fare qualcosa e poi fare un timeout dopo un po' se non è successo niente.
Per esempio: