實際工作中可以把下面的代碼直接拿過去改改即可
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; } }