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

Callable和Future

时间:2014-11-01 19:17:29      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:public   future   result   start   

Callable方法比Runnable强大一些在于它被线程执行后有返回值,该返回值可以被Future拿到。

用法:

Callable<Integer> callable = new Callable<Integer>(){

    public Integer call() throws Exception {

        //do sth    

    }

};


FutureTask<Integer> future = new FutureTask<Integer>(callable);

new Thread(future).start();


String result = future.get();//获取返回结果


下面看另一种方式使用Callable和Future,通过ExecutorService的submit方法执行Callable,并且返回Future:

ExecutorService threadPool = Executors.newSingleThreadExecutor();

Future<Integer> future = threadPool.summit(new Callable<Integer>(){

    public Integer call() throws Exception {

        //do sth

    }

});

future.get();


执行多个待返回值得任务,并取得多个返回值:

ExecutorService threadPool = Executors.newCachedThreadPool();

CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(threadPool);

for (int i = 1 ; i < 5 ; i++) {

    final int taskID = i;

    cs.submit(new Callable<Integer>(){

        public Integer call() throws Exception{

            return taskID;

        }

    };

}


for(int i = 1 ; i < 5 ; i++) {

    cs.take().get

}

其实也可以不使用CompletionService,可以先创建一个装Future类型的集合,用Executor提交的任务返回值添加到集合中,最后遍历集合取出数据。

Callable和Future

标签:public   future   result   start   

原文地址:http://6169621.blog.51cto.com/6159621/1570757

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