zoukankan      html  css  js  c++  java
  • 怎样给ExecutorService异步计算设置超时

    ExecutorService接口使用submit方法会返回一个Future<V>对象。Future表示异步计算的结果。它提供了检查计算是否完毕的方法,以等待计算的完毕,并获取计算的结果。计算完毕后仅仅能使用get方法来获取结果。如有必要,计算完毕前能够堵塞此方法。取消则由cancel方法来运行。还提供了其它方法,以确定任务是正常完毕还是被取消了。

    一旦计算完毕,就不能再取消计算。假设为了可取消性而使用Future但又不提供可用的结果,则能够声明Future<?>形式类型、并返回null作为底层任务的结果。

    写个简单样例:

    import java.util.concurrent.*;
    
    /**
     * To change this template use File | Settings | File Templates.
     *
     * @author wangqing
     * @since 1.0.0
     */
    public class TestFuture {
        public static void main(String[] args) {
            ExecutorService poll = Executors.newFixedThreadPool(100);
            Future<Boolean> future = poll.submit(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    Thread.sleep(1000*10);
                    System.out.println("任务运行完毕");
                    return true; 
                }
            });
            try {
                future.get(3,TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace(); //get为一个等待过程。异常中止get会抛出异常 
            } catch (ExecutionException e) {
                e.printStackTrace(); //submit计算出现异常
            } catch (TimeoutException e) {
                e.printStackTrace(); //超时异常
                future.cancel(true); //超时后取消任务
            }finally {
                poll.shutdown();
            }
        }
    }


  • 相关阅读:
    C++学习之【使用位操作符求素数分析】
    LeetCodeOJ刷题之13【Roman to Integer】
    QT学习之文件系统读写类
    让免费版MarkdownPad2使用Pro版本的功能
    QT学习之窗口右键菜单
    react 16.3+ 新生命周期 作业
    react 16.3+ 新生命周期
    node层设置proxy不生效的原因
    Javascript权威指南——读书笔记
    react踩坑
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6728204.html
Copyright © 2011-2022 走看看