有返回值的多线程
import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.*; public class ServalMethod { /** * 有返回值的线程 */ public static void main(String[] args) throws ExecutionException, InterruptedException { System.out.println("------程序开始运行------"); Date date = new Date(); int taskSize = 5; //创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(taskSize); //创建多个有返回值的任务 List<Future> futures = new ArrayList<Future>(); for(int i=0;i<taskSize;i++){ Callable c = new MyCallable(i+""); //执行线程并获取Future对象 Future f = pool.submit(c); // System.out.println(">>>"+f.get().toString()); futures.add(f); } //关闭线程池 pool.shutdown(); //获取所有并发任务的运行结果 for(Future f:futures){ //从Future对象上获取任务的返回值,并输出到控制台 System.out.println(">>>"+f.get().toString()); } Date date1 = new Date(); System.out.println("-----程序运行结束------,程序运行时间【"+(date1.getTime()-date.getTime())+"毫秒】"); } } class MyCallable implements Callable<Object>{ private String taskNum; MyCallable(String taskNum){ this.taskNum=taskNum; } @Override public Object call() throws Exception { System.out.println(">>>"+taskNum+"任务启动"); Date dateTmpl = new Date(); Thread.sleep(1000); Date dateTmp2 = new Date(); long time = dateTmp2.getTime()-dateTmpl.getTime(); System.out.println(">>>"+taskNum+"任务终止"); return taskNum+"任务返回运行结果【"+time+"ms】"; } }
运行结果如下: