• 怎样给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();
            }
        }
    }


  • 相关阅读:
    编译 | 更新标准库_交叉编译工具链
    论文 | 图文_学科
    编码 | 二进制格式设计方案
    图片 | 图片上传管理
    进程 | 查询进程中包含多少线程
    第二周02:Fusion ICP逐帧融合
    exe文件当前目录搜索文件
    第一周:读取XML深度数据并将其重建为三维点云
    第二周:01 ICP迭代交互
    C++文件读写(转载)
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6728204.html
Copyright © 2020-2023  润新知