Callable 实用demo

来源:互联网 发布:java swing 做登录界面 编辑:程序博客网 时间:2024/06/03 19:06
//java调用Callable 多线程
package com.example.thread;import java.util.ArrayList;import java.util.List;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 TestThread2 {public static void main(String[] args) {long to = System.currentTimeMillis();int taskSize = 3;ExecutorService pool = Executors.newFixedThreadPool(taskSize);List<Future<List<String>>> listFuture = new ArrayList<>();Callable<List<String>> call = null;Integer[] arr = new Integer[]{100,200,300};for(int i=0; i<taskSize; i++){call = createCallableTask(arr[i]);listFuture.add(pool.submit(call));}pool.shutdown();//get result from futuretry {List<String> result = new ArrayList<>();for(int i=0; i<listFuture.size(); i++){List<String> temp = listFuture.get(i).get();if(null != temp){result.addAll(temp);}}for(int i=0; i<result.size(); i++){System.out.println("element:-->"+ result.get(i));}long tx = System.currentTimeMillis();System.out.println((tx-to)+ " ms");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ExecutionException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 创建  Callable Task * @return */public static Callable<List<String>> createCallableTask(final Integer base) {Callable<List<String>> call = new Callable<List<String>>() {@Overridepublic List<String> call() throws Exception {List<String> list = new ArrayList<>();for(int i=0; i<base; i++){list.add("base :"+ base + " -e:"+ i);}return list;}};return call;}}

0 0
原创粉丝点击