package com.utils; import javax.xml.crypto.Data; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.*; /** * Author: linjunit * Version: * Date: 2017/11/13 0013 * Description: * Modification History: * Date Author Version Description * -------------------------------------------------------------- * Why & What is modified: */ public class CallableFutureTest { public static void Test(){ ExecutorService pool = Executors.newFixedThreadPool(3);//创建指定数量的线程池 List<Future> listFuture=new ArrayList<Future>();//多个线程的返回值集合 for(int i=0;i<3;i++) { Callable ca = new MyCallable(i);//创建callable实例化对象 Future ft = pool.submit(ca);//执行线程并将返回值放入Future中 listFuture.add(ft); } for(Future f:listFuture){ try { System.out.print("线程返回值:"+f.get());//通过Future的get()方法获取返回值 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } pool.shutdown();//关闭线程池 } } class MyCallable implements Callable<Object>{ private Integer threadName; /** * 定义一个构造函数 获取当前线程名称 * @param threadName */ MyCallable(Integer threadName){ this.threadName=threadName; } /** * 重写 call()方法,实现主体,并有返回值 * @return * @throws Exception */ @Override public Object call() throws Exception { Date d1=new Date(); Thread.sleep(1000); Date d2=new Date(); return(threadName+"执行完毕"+"执行时间为"+(d2.getTime()-d1.getTime())); } }
Callable、Future多线程 线程池处理有返回值
最新推荐文章于 2024-01-24 17:27:02 发布