zoukankan      html  css  js  c++  java
  • 线程池使用Callable示例【我】

    实际工作中可以把下面的代码直接拿过去改改即可

    package threadtest;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class T1 {
    
        public static void main(String[] args) throws Exception {
    
            //定义返回值集合
            List<Future<Map<String, Object>>> resultList = new ArrayList();
            //创建一个线程池
            ExecutorService taskExecutor = Executors.newFixedThreadPool(3);
            //执行多线程
            for (int i = 0; i < 4; i++) {//【实际使用中,这里可以是批量数据的循环】
                //定义要传入线程中的参数
                HashMap<String, Object> param = new HashMap<String, Object>();
                param.put("index", i);
                //创建线程执行类对象
                MyCallable c = new MyCallable(param);
                //执行线程并获取执行结果
                Future<Map<String, Object>> f = taskExecutor.submit(c);
                //将执行结果存入集合
                resultList.add(f);
            }
            //关闭线程池
            taskExecutor.shutdown();
            //批量处理线程执行结果
            for (Future<Map<String,Object>> future : resultList) {
                if (future != null);
                //这个get方法会阻塞直到获取到线程的执行结果
                Map<String, Object> map = future.get();
                System.out.println(map);
            }
        }
    }
    
    //自定义线程处理类
    class MyCallable implements Callable<Map<String,Object>> {
        
        private HashMap<String, Object> paramMap;
        
        public MyCallable(HashMap<String, Object> paramMap) {
            super();
            this.paramMap = paramMap;
        }
        
        //call方法的返回值可以是任意类型,和Callable<Map<String,Object>>一致即可
        @Override
        public Map<String, Object> call() throws Exception {
            //定义返回map
            HashMap<String, Object> rtnMap = new HashMap<String, Object>();
            //获取参数中的内容
            Integer index = (Integer) paramMap.get("index");
            //处理业务逻辑
            int sum = 0;
            for (int i = 0; i <= index; i++) {
                System.out.println("index:"+index +"--- "+i);
                sum += i;
            }
            //返回业务逻辑结果
            rtnMap.put("index", index);
            rtnMap.put("sum", sum);
            return rtnMap;
        }
    
    }
  • 相关阅读:
    python3 练习题 day04
    python3 装饰器
    python3 生成器和生成器表达式
    python3 列表/字典/集合推导式
    python3 迭代器
    python3 day04 大纲
    ES6 的数值扩展
    ES6中的解构赋值
    ES6中 let与const 的区别
    react的基本配置安装及使用babel
  • 原文地址:https://www.cnblogs.com/libin6505/p/11250866.html
Copyright © 2011-2022 走看看