码迷,mamicode.com
首页 > 其他好文 > 详细

ExecutorService的submit方法的坑

时间:2016-09-26 14:27:19      阅读:486      评论:0      收藏:0      [点我收藏+]

标签:

先看一段代码:

    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();

 

ExecutorService的submit方法的坑

标签:

原文地址:http://www.cnblogs.com/dragonfei/p/5908954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!