使用執行緒池,並發計算1~50、51~100的和,再進⾏匯總統計。
知識點:獲取執行緒池、提交任務、獲取返回值
獲取執行緒池的幾種方式:
newFixedThreadPool(int nThreads) 獲取固定數量的執行緒池。參數:指定執行緒池中執行緒的數量。(使用這種)
newCachedThreadPool() 獲得動態數量的執行緒池,如不夠則創建新的,⽆上限。
newSingleThreadExecutor() 創建單個執行緒的執行緒池,只有⼀個執行緒。
newScheduledThreadPool() 創建固定⼤⼩的執行緒池,可以延遲或定時執⾏任務。
Callable:jdk1.5之後可以使用Callable來實現執行緒,這個類的call方法具有泛型返回值、可以聲明異常。
Runnable接⼝和Callable接⼝的區別:
Callable接⼝中call⽅法有返回值,Runnable接⼝中run⽅法沒有返回值。
Callable接⼝中call⽅法有聲明異常,Runnable接⼝中run⽅法沒有異常。
Future接⼝表示將要執⾏完任務的結果。 get()以阻塞形式等待Future中的非同步處理結果(call()的返回值)。
案例1:使⽤兩個執行緒,並發計算1~50、51~100的和,再進⾏匯總統計。
public class TestFuture2 { public static void main(String[] args) throws Exception{ //1創建執行緒池 ExecutorService es= Executors.newFixedThreadPool(2); //2提交任務 Future<Integer> future1=es.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { int sum=0; for(int i=1;i<=50;i++) { sum+=i; } System.out.println("1-50計算完畢"); return sum; } }); Future<Integer> future2=es.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { int sum=0; for(int i=51;i<=100;i++) { sum+=i; } System.out.println("51-100計算完畢"); return sum; } }); //3獲取結果 int sum=future1.get()+future2.get(); System.out.println("結果是:"+sum); //4關閉執行緒池 es.shutdown(); } }