How to set a Timer in Java?

How to set a Timer, say for 2 minutes, to try to connect to a Database then throw exception if there is any issue in connection?

1

5 Answers

So the first part of the answer is how to do what the subject asks as this was how I initially interpreted it and a few people seemed to find helpful. The question was since clarified and I've extended the answer to address that.

Setting a timer

First you need to create a Timer (I'm using the java.util version here):

import java.util.Timer; 

..

Timer timer = new Timer(); 

To run the task once you would do:

timer.schedule(new TimerTask() { @Override public void run() { // Your database code here } }, 2*60*1000); // Since Java-8 timer.schedule(() -> /* your database code here */, 2*60*1000); 

To have the task repeat after the duration you would do:

timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // Your database code here } }, 2*60*1000, 2*60*1000); // Since Java-8 timer.scheduleAtFixedRate(() -> /* your database code here */, 2*60*1000, 2*60*1000); 

Making a task timeout

To specifically do what the clarified question asks, that is attempting to perform a task for a given period of time, you could do the following:

ExecutorService service = Executors.newSingleThreadExecutor(); try { Runnable r = new Runnable() { @Override public void run() { // Database task } }; Future<?> f = service.submit(r); f.get(2, TimeUnit.MINUTES); // attempt the task for two minutes } catch (final InterruptedException e) { // The thread was interrupted during sleep, wait or join } catch (final TimeoutException e) { // Took too long! } catch (final ExecutionException e) { // An exception from within the Runnable task } finally { service.shutdown(); } 

This will execute normally with exceptions if the task completes within 2 minutes. If it runs longer than that, the TimeoutException will be throw.

One issue is that although you'll get a TimeoutException after the two minutes, the task will actually continue to run, although presumably a database or network connection will eventually time out and throw an exception in the thread. But be aware it could consume resources until that happens.

11

Use this

long startTime = System.currentTimeMillis(); long elapsedTime = 0L. while (elapsedTime < 2*60*1000) { //perform db poll/check elapsedTime = (new Date()).getTime() - startTime; } //Throw your exception 
11

Ok, I think I understand your problem now. You can use a Future to try to do something and then timeout after a bit if nothing has happened.

E.g.:

FutureTask<Void> task = new FutureTask<Void>(new Callable<Void>() { @Override public Void call() throws Exception { // Do DB stuff return null; } }); Executor executor = Executors.newSingleThreadScheduledExecutor(); executor.execute(task); try { task.get(5, TimeUnit.SECONDS); } catch(Exception ex) { // Handle your exception } 
3
 new java.util.Timer().schedule(new TimerTask(){ @Override public void run() { System.out.println("Executed..."); //your code here //1000*5=5000 mlsec. i.e. 5 seconds. u can change accordngly } },1000*5,1000*5); 
2

[Android] if someone looking to implement timer on android using java.

you need use UI thread like this to perform operations.

Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { ActivityName.this.runOnUiThread(new Runnable(){ @Override public void run() { // do something } }); } }, 2000)); 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like