第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。
创建个线程池:
private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task"));
创建任务列表futureTaskList 
taskList是业务内容,它的长度是线程数,也是循环次数。
List<Future<Map<String,Object>>> futureTaskList = Lists.newArrayListWithCapacity(taskList.size());
for(String task : taskList) {
        futureTaskList.add(cachedThreadPool.submit(new Callable<Map<String,Object>>(){
            @Override
            public Map<String,Object> call() throws Exception {
                //task相关业务
                ...
                return map;
            }
        }));
}
等待返回结果,用future.get()获取结果。
List<Map<String,Object>> AllDataList = new ArrayList<>();
for(Future<Map<String,Object>> future : futureTaskList){
        try {
            AllDataList.add(future.get());
        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
}
关闭线程池
try {
    // 通知
    cachedThreadPool.shutdown();
    // (所有的任务都结束的时候,返回TRUE)
    if(!cachedThreadPool.awaitTermination(awaitTime, TimeUnit.MILLISECONDS)){
        // 超时的时候向线程池中所有的线程发出中断(interrupted)。
        cachedThreadPool.shutdownNow();
    }
} catch (InterruptedException e) {
    // awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。
    System.out.println("awaitTermination interrupted: " + e);
    cachedThreadPool.shutdownNow();
}