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;
}
}/*** 創(chuàng)建一個線程池窿给,將50個任務分配進去星岗,并發(fā)量最大為5
* 運行結(jié)束后,輸出每個線程返回的結(jié)束
* title:ThreadPoolExecutorTest
* descript:
*@authorliuzh
* @date 2016年5月18日 下午8:16:26*/publicclassThreadPoolExecutorTest {publicvoidstart()throwsInterruptedException, ExecutionException {/*** 創(chuàng)建線程池允华,并發(fā)量最大為5
* LinkedBlockingDeque,表示執(zhí)行任務或者放入隊列*/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);//調(diào)用submit可以獲得線程的返回值Future result =tpe.submit(task);
results.add(result);
}//此函數(shù)表示不再接收新任務磷蜀,//如果不調(diào)用,awaitTermination將一直阻塞tpe.shutdown();//1天褐隆,模擬永遠等待System.out.println(tpe.awaitTermination(1, TimeUnit.DAYS));//輸出結(jié)果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