java后台请求接口超时的处理 |
您所在的位置:网站首页 › 网络接口超时怎么处理 › java后台请求接口超时的处理 |
以上内容出自:https://www.cnblogs.com/hzjjames/p/java_timeout.html; 但是遇到一个idea自动提示的错误,如下图:
官方更推荐用ThreadPoolExecutor的方式手动创建线程池。 于是将上面的代码改为: ArrayBlockingQueue queue = new ArrayBlockingQueue(20); ExecutorService executorService = new ThreadPoolExecutor(3, 5, 50, TimeUnit.MILLISECONDS, queue);警告消除。 ArrayBlockingQueue queue = new ArrayBlockingQueue(20); ExecutorService executorService = new ThreadPoolExecutor(3, 5, 50, TimeUnit.MILLISECONDS, queue); // ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2); Future future = executorService.submit(() -> { try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); System.out.println("任务被中断"); } return "OK"; }); try { future.get(5, TimeUnit.SECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { // 参数为true则会强制interrupt中断 future.cancel(true); e.printStackTrace(); System.out.println("任务超时"); return "任务超时"; } finally { System.out.println("清理资源"); }代码解读: 一、callable是函数式接口,可以用lambda表达式简化书写: 二、future.cancle(); future.cancel(true);参数可以为false和true,参数为true则会强制interrupt中断正在执行的任务。控制台打印任务中断异常: 三、TimeUnit.SECONDS.sleep(10); 底层调用的还是Thread.sleep()方法: 参考链接: 1.futureTask解读:https://www.cnblogs.com/maypattis/p/5827671.html 2.Executor、Executors、ExecutorService:https://blog.csdn.net/weixin_40304387/article/details/80508236 3.Thread.sleep()和TimeUnit.SECONDS.sleep()的区别与联系:https://www.cnblogs.com/sanhuan/p/4826401.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |