zoukankan      html  css  js  c++  java
  • ExecutorService的submit方法的坑

    先看一段代码:

        public Future<?> submit(Runnable task) {
            if (task == null) throw new NullPointerException();
            RunnableFuture<Void> ftask = newTaskFor(task, null);
            execute(ftask);
            return ftask;
        }
     protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
            return new FutureTask<T>(runnable, value);
        }

    注意,如果submit提交的参数传递的Runnable类型会将Runnable适配为一个FutureTask对象,但结果为null,及Future.get()的结果为null。

    这会有一个问题:如果submit提交的参数本身就是一个FutureTask,那么他的结果也会被适配为null,导致与预期结果不符。解决办法,如果本省就是FutureTask,则使用execute方法提交。

     ListenableFutureTask<RecordSet> f = new SecondTaskFutureTask(new Callable<RecordSet>() {
                @Override
                public RecordSet call() throws Exception {
                    RecordSet rs = process.process(pw);
                    return rs;
                }
            });
            ex.execute(f);
            RecordSet rs = f.get();
  • 相关阅读:
    响应式设计
    Flex box 弹性盒子布局
    下拉菜单  -
    html使用技巧
    nth-of-type(n)
    Js中 关于top、clientTop、scrollTop、offsetTop
    仿iPhone滑屏操作
    网页超过一页 点击回到顶部
    linux svn使用
    Linux查看CPU和内存使用情况
  • 原文地址:https://www.cnblogs.com/dragonfei/p/5908954.html
Copyright © 2011-2022 走看看