class Task implements Callable{
privateString filename;publicTask(String filename) {
this.filename =filename;
}
@Override
public String call() throwsException {try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成 "+filename);return"返回值" +filename;
}
}/*** 创建一个线程池,将50个任务分配进去,并发量最大为5
* 运行结束后,输出每个线程返回的结束
* title:ThreadPoolExecutorTest
* descript:
*@authorliuzh
* @date 2016年5月18日 下午8:16:26*/publicclassThreadPoolExecutorTest {publicvoidstart()throwsInterruptedException, ExecutionException {/*** 创建线程池,并发量最大为5
* LinkedBlockingDeque,表示执行任务或者放入队列*/ThreadPoolExecutor tpe=newThreadPoolExecutor(5, 10, 0,
TimeUnit.SECONDS,newLinkedBlockingDeque(),newThreadPoolExecutor.CallerRunsPolicy());//存储线程的返回值List> results =newLinkedList>();for(inti = 0; i < 10; i++) {
Task task=newTask(String.valueOf(i));
System.out.println("放入线程池:" +i);//调用submit可以获得线程的返回值Future result =tpe.submit(task);
results.add(result);
}//此函数表示不再接收新任务,//如果不调用,awaitTermination将一直阻塞tpe.shutdown();//1天,模拟永远等待System.out.println(tpe.awaitTermination(1, TimeUnit.DAYS));//输出结果for(inti = 0; i < 10; i++) {
System.out.println(results.get(i).get());
}
}publicstaticvoidmain(String[] args)throwsInterruptedException, ExecutionException {
ThreadPoolExecutorTest test=newThreadPoolExecutorTest();
test.start();
}
}
输出样例:
放入线程池:0
放入线程池:1
放入线程池:2
放入线程池:3
放入线程池:4
放入线程池:5
放入线程池:6
放入线程池:7
放入线程池:8
放入线程池:9
完成 1
完成 0
完成 2
完成 3
完成 4
完成 9
完成 6
完成 8
完成 5
完成 7
true
返回值0
返回值1
返回值2
返回值3
返回值4
返回值5
返回值6
返回值7
返回值8
返回值9
原文链接:https://www.cnblogs.com/liu-zh/p/5506492.html