【问题标题】:Auto exception on time out in JAVAJAVA中超时自动异常
【发布时间】:2015-06-25 05:02:51
【问题描述】:

我需要创建一个方法,如果我输入该方法并且如果我需要超过 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;
}

【问题讨论】:

    标签: java exception exception-handling timertask throw


    【解决方案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 秒则停止。在这里,您可以投掷或随心所欲。否则,它将继续工作。

    【讨论】:

    • 但在这种情况下,条件每次都会评估,这将导致执行一些额外的语句,我不希望在我的代码中这样做,因为我有一个函数,其中循环可以处理 100000000 次。
    • 我只是试图指出经过时间和当前时间可以是一种方式,但这个例子并不是一个完美的例子。抱歉,我帮不上什么忙。
    • 无需抱歉,只是我需要其他类型的解决方案...但感谢您的努力。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多