執行緒池處理Callable任務
阿新 • • 發佈:2022-11-30
執行緒池如何處理Callable任務
執行緒池如何處理Callable任務,並得到任務執行完後返回的結果。
使用ExecutorService的方法:
Future<T> submit(Callable<T> command)
package com.itheima.d8_threadpool; import java.util.concurrent.Callable; /** 1、定義一個任務類 實現Callable介面 應該申明執行緒任務執行完畢後的結果的資料型別 */ public class MyCallable implements Callable<String>{ private int n; public MyCallable(int n) { this.n = n; } /** 2、重寫call方法(任務方法) */ @Override public String call() throws Exception { int sum = 0; for (int i = 1; i <= n ; i++) { sum += i; } return Thread.currentThread().getName() + "執行 1-" + n+ "的和,結果是:" + sum; } }
package com.itheima.d8_threadpool; import java.util.concurrent.*; /** 目標:自定義一個執行緒池物件,並測試其特性。 */ public class ThreadPoolDemo2 { public static void main(String[] args) throws Exception { // 1、建立執行緒池物件 /** public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) */ ExecutorService pool = new ThreadPoolExecutor(3, 5 , 6, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5) , Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy() ); // 2、給任務執行緒池處理。 Future<String> f1 = pool.submit(new MyCallable(100)); Future<String> f2 = pool.submit(new MyCallable(200)); Future<String> f3 = pool.submit(new MyCallable(300)); Future<String> f4 = pool.submit(new MyCallable(400)); Future<String> f5 = pool.submit(new MyCallable(500)); // String rs = f1.get(); // System.out.println(rs); System.out.println(f1.get()); System.out.println(f2.get()); System.out.println(f3.get()); System.out.println(f4.get()); System.out.println(f5.get()); } }