java執行緒池(有返回值和無返回值)
阿新 • • 發佈:2018-11-09
無返回值:
package ThreadPool2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class test { public static void main(String[] args) { //1、建立執行緒池 //建立一個執行緒池 // ExecutorService pool=Executors.newSingleThreadExecutor(); //建立固定個數的執行緒池 ExecutorService pool=Executors.newFixedThreadPool(10); //建立不固定個數的執行緒池 // ExecutorService pool=Executors.newCachedThreadPool(); //2、使用執行緒池(完成大量沒有返回值的Runnable命令) for(int i=0;i<20;i++) { int n=i;//1.7版本要final修飾,1.8不需要 Runnable r=new Runnable() { public void run() { System.out.println("執行緒建立"+n); try { Thread.currentThread().sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("執行緒結束"+n); } }; pool.execute(r); } //3、結束執行緒池 pool.shutdown(); } }
有返回值:
package ThreadPool2; import java.util.ArrayList; import java.util.List; import java.util.Random; 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 test2 { public static void main(String[] args) throws InterruptedException, ExecutionException { //1、建立執行緒池 //建立一個執行緒池 // ExecutorService pool=Executors.newSingleThreadExecutor(); //建立固定個數的執行緒池 // ExecutorService pool=Executors.newFixedThreadPool(10); //建立不固定個數的執行緒池 ExecutorService pool=Executors.newCachedThreadPool(); //2、使用執行緒池(完成大量沒有返回值的Runnable命令) //需要60秒 // for(int i=0;i<20;i++) { // Callable<Integer> task=new myCallable(); // Future<Integer> future=pool.submit(task); // int result=future.get(); // System.out.println(result); // } //需要3秒 List<Future> list=new ArrayList<>(); for(int i=0;i<20;i++) { Callable<Integer> task=new myCallable(); Future<Integer> future=pool.submit(task); list.add(future); } for(Future f:list) { System.out.println(f.get()); } //3、結束執行緒池 pool.shutdown(); } } class myCallable implements Callable<Integer>{ @Override public Integer call() throws Exception { // TODO Auto-generated method stub System.out.println("執行緒開始"); Thread.currentThread().sleep(3000); System.out.println("執行緒結束"); return new Random().nextInt(10); } }