Java併發——Executor框架詳解(Executor框架結構與框架成員)
一、什麼是Executor框架?
我們知道執行緒池就是執行緒的集合,執行緒池集中管理執行緒,以實現執行緒的重用,降低資源消耗,提高響應速度等。執行緒用於執行非同步任務,單個的執行緒既是工作單元也是執行機制,從JDK1.5開始,為了把工作單元與執行機制分離開,Executor框架誕生了,他是一個用於統一建立與執行的介面。Executor框架實現的就是執行緒池的功能。
二、Executor框架結構圖解
1、Executor框架包括3大部分:
(1)任務。也就是工作單元,包括被執行任務需要實現的介面:Runnable介面或者Callable介面;
(2)任務的執行。也就是把任務分派給多個執行緒的執行機制,包括Executor介面
(3)非同步計算的結果。包括Future介面及實現了Future介面的FutureTask類。
Executor框架的成員及其關係可以用一下的關係圖表示:
2、Executor框架的使用示意圖:
使用步驟:
(1)建立Runnable並重寫run()方法或者Callable物件並重寫call()方法:
class callableTest implements Callable<String >{ @Override public String call() { try{ String a = "return String"; return a; } catch(Exception e){ e.printStackTrace(); return "exception"; } } }
(2)建立Executor介面的實現類ThreadPoolExecutor類或者ScheduledThreadPoolExecutor類的物件,然後呼叫其execute()方法或者submit()方法把工作任務新增到執行緒中,如果有返回值則返回Future物件。其中Callable物件有返回值,因此使用submit()方法;而Runnable可以使用execute()方法,此外還可以使用submit()方法,只要使用callable(Runnable task)或者callable(Runnable task, Object result)方法把Runnable物件包裝起來就可以,使用callable(Runnable task)方法返回的null,使用callable(Runnable task, Object result)方法返回result。
ThreadPoolExecutor tpe = new ThreadPoolExecutor(5, 10,
100, MILLISECONDS, new ArrayBlockingQueue<Runnable>(5));
Future<String> future = tpe.submit(new callableTest());
(3)呼叫Future物件的get()方法後的返回值,或者呼叫Future物件的cancel()方法取消當前執行緒的執行。最後關閉執行緒池
try{
System.out.println(future.get());
}
catch(Exception e){
e.printStackTrace();
}
finally{
tpe.shutdown();
}
三、Executor框架成員:ThreadPoolExecutor實現類、ScheduledThreadPoolExecutor實現類、Future介面、Runnable和Callable介面、Executors工廠類
1、ThreadPoolExecutor實現類:點選開啟連結
2、ScheduledThreadPoolExecutor實現類:點選開啟連結
3、Future介面/FutureTask實現類:點選開啟連結
4、Runnable和Callable介面:用於實現執行緒要執行的工作單元。
5、Executors工廠類:提供了常見配置執行緒池的方法,因為ThreadPoolExecutor的引數眾多且意義重大,為了避免配置出錯,才有了Executors工廠類。