码迷,mamicode.com
首页 > 编程语言 > 详细

java多线程Future和Callable类的解释与使用

时间:2016-01-13 09:22:30      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

一,描写叙述


    ?在多线程下编程的时候。大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取每一个线程中返回的数据然后再做统一处理,在这种需求下,Future与Callable的组合就派上了非常大的用场。

也有人会说,我能够使用同步来完毕这个需求啊,普通情况下确实能够。可是在一种特殊情况下就不行了:

    ?想象,你开启了多个线程同步计算一些数据,可是大家都知道,线程是会争用资源的,也就是说。你开启多个线程来同步计算数据时。事实上线程之间的计算顺序是不可空的,当然除非你非非常大周折去处理也不无可能。在这样的情况下。Future和Callable的组合就是不二之选了。


?

二,样例



这两个类的样例事实上非常easy,主要就看自己在实际运用中能不能找到他们的用武之地了。上代码:

package test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class FetureCallableTest {
    private static ExecutorService service = Executors.newFixedThreadPool(100);
    private static int count = 1;
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        int sum = 0;
        for(int i = 0; i < 100; i++) {
            Future<Integer> future = service.submit(new Callable<Integer>(){
    
                @Override
                public Integer call() throws Exception {
                    System.out.println(Thread.currentThread().getName());
                    return ++count;
                }
                
            });
            int f = future.get();
            sum += f;
            System.out.println("future is " + f);
        }
        System.out.println("sum is " + sum);
        service.shutdownNow();
    }

}


java多线程Future和Callable类的解释与使用

标签:

原文地址:http://www.cnblogs.com/mengfanrong/p/5126146.html

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