设置方法/线程的最大执行时间

OneMoreError

我有一个方法,可以写入数据库。要求是确保经过一定时间后该方法不执行。如果在此之前返回,则什么也不做。

我能想到的一种基本方法就是这样做。

public class LimitedRuntime {

    public static void writeToDb(){
            // writes to the database
    }

    public static void main(String[] args) {
        long totalExecutionTime = 8000L;
        long startTime = System.currentTimeMillis();

        while(System.currentTimeMillis() - startTime < totalExecutionTime )
        {
            writeToDb();
        }   
    }
}

这种方法的一个问题是,即使该方法在最大总执行时间之前返回,程序也会暂停以等待经过的时间。

我该如何做得更好(或更正确)?如果使用Thread我们如何找出Thread执行该方法的对象?

安德烈·查舍夫(Andrey Chaschev)

您可以通过将工作发送给执行者来做到这一点:

 public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(4);

    Future<?> future = executor.submit(new Runnable() {
        @Override
        public void run() {
            writeToDb();            //        <-- your job
        }
    });

    executor.shutdown();            //        <-- reject all further submissions

    try {
        future.get(8, TimeUnit.SECONDS);  //     <-- wait 8 seconds to finish
    } catch (InterruptedException e) {    //     <-- possible error cases
        System.out.println("job was interrupted");
    } catch (ExecutionException e) {
        System.out.println("caught exception: " + e.getCause());
    } catch (TimeoutException e) {
        future.cancel(true);              //     <-- interrupt the job
        System.out.println("timeout");
    }

    // wait all unfinished tasks for 2 sec
    if(!executor.awaitTermination(2, TimeUnit.SECONDS)){
        // force them to quit by interrupting
        executor.shutdownNow();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

测量多个线程的执行时间

来自分类Dev

线程中的总执行时间

来自分类Dev

测量多个线程的执行时间

来自分类Dev

OpenTBS超过最大执行时间

来自分类Dev

脚本超过最大执行时间

来自分类Dev

设置命令的最短执行时间

来自分类Dev

跟踪方法执行时间

来自分类Dev

setter方法的执行时间

来自分类Dev

执行时间

来自分类Dev

如何在Python中获得线程执行时间

来自分类Dev

如何在macOS中测量线程的执行时间?

来自分类Dev

PHP脚本中的最大执行时间错误,这是绕过它的好方法吗?

来自分类Dev

WAMPServer phpMyadmin超过360秒的最大执行时间

来自分类Dev

最大是多少 php artisan命令的执行时间

来自分类Dev

致命错误:超过500秒的最大执行时间

来自分类Dev

超过300秒的最大执行时间

来自分类Dev

长轮询超过最大执行时间

来自分类Dev

PHP GoDaddy的最大执行时间不起作用

来自分类Dev

Google脚本说-超过最大执行时间

来自分类Dev

Google脚本-超出了最大执行时间

来自分类Dev

超过最大执行时间(第0行)

来自分类Dev

Google Apps脚本-超出了最大执行时间

来自分类Dev

Google脚本-超出了最大执行时间

来自分类Dev

Dompdf Laravel "超过 60 秒的最大执行时间"

来自分类Dev

sleep() 不会阻止最大执行时间

来自分类Dev

我可以将php.ini中的最大执行时间设置为30,000吗?

来自分类Dev

即使设置了max_execution_time = 3600,如何解决“超过30秒的最大执行时间错误”

来自分类Dev

功能执行时间

来自分类Dev

测量执行时间