java使用 Future 获得线程返回的结果

//执行多任务类
    public Map tasks(List pddAccounts,int length) throws InterruptedException {
        Map map=new HashMap<>();
        List rlist=new ArrayList<>();
        ExecutorService pool = Executors.newFixedThreadPool(30);

        for (int i = 0; i < pddAccounts.size(); i++) {
            PddAccount account = pddAccounts.get(i);
            try{
                Callable callable = new Callable() {
                    @Override
                    public Object call() throws Exception {
                        boolean validAccountAndLength = getValidAccountAndLength(account);
                        return validAccountAndLength;
                    }
                };

                Future future = pool.submit(callable);
                boolean o = (boolean)future.get();
                if(o){
                    rlist.add(account);
                }
                if(rlist.size() >= length){
                    pool.shutdown();//快速关闭线城池

                    map.put("list",rlist);
                    return map;
                }
            }catch (Exception e){
                System.out.println("出现异常");
            }
        }
        map.put("list",rlist);
        return map;
    } 
  

 

你可能感兴趣的:(java)