zoukankan      html  css  js  c++  java
  • java多线程Future和Callable类的解释与使用

    一,描写叙述


        ​在多线程下编程的时候。大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取每一个线程中返回的数据然后再做统一处理,在这种需求下,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的第八天
    学习Java的第七天
    学习Java的第六天
    学习Java的第五天
    学习Java的第四天
    学习Java的第三天
    学习Java的第二天
    学习Java的第一天
    第九天
    第八次
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5126146.html
Copyright © 2011-2022 走看看