JAVA中的超时自动异常

时间:2015-06-25 05:02:52

标签: java exception exception-handling timertask throw

我需要创建一个方法,如果我输入该方法并且如果我需要超过30秒来处理该方法,那么它应该抛出一个异常,我会立即从该方法中退出并且我可以处理调用方法中的异常,以便我的下一个进程正常。

public static void method() {
    Timer timer=new Timer();
    timer.schedule(new TimerTask() {
        @SuppressWarnings("finally")
        @Override
        public void run() {
            try {
                System.out.println("inner "+Thread.currentThread());
                System.out.println("first ");
            }
            finally{ System.out.println("before return "); throw new RuntimeException("Sorry TimeOut");}
            } 
    },400);
    try{
        System.out.println(Thread.currentThread());
        Thread.sleep(1000);
        }catch(InterruptedException e){}
        System.out.println("OKKKKK");
    //return null;
}

1 个答案:

答案 0 :(得分:1)

您可以使用System.currentTimeMillis()来超过初始/输入时间,然后检查当前时间。然后,比较已经过了多少时间。如果没有超过所需的时间限制,则继续操作。如果越过,则返回或抛出异常。示例代码如下:

public class Test{

public static void main( String[] argv) throws Exception{
    Timer timer=new Timer();
    timer.schedule(new TimerTask() {

          @Override
          public void run() {
            long currentTime = System.currentTimeMillis();
            int i = 0;
            while (i < 9999999){
                if ((System.currentTimeMillis()-currentTime)>(3*1000L)) {
                    System.out.println("Time is up");
                    return;
                }
                System.out.println("Current value: " + i);
                i++;
            }
          }
        }, 5*1000);
}
}

现在,如果System.currentTimeMillis()-currentTime表示时差。如果时间差高于3秒则会停止。在这里,你可以扔或任何你想要的。否则,它将继续有效。