1. 程式人生 > >Java併發——Executor框架詳解(Executor框架結構與框架成員)

Java併發——Executor框架詳解(Executor框架結構與框架成員)

一、什麼是Executor框架?

我們知道執行緒池就是執行緒的集合,執行緒池集中管理執行緒,以實現執行緒的重用,降低資源消耗,提高響應速度等。執行緒用於執行非同步任務,單個的執行緒既是工作單元也是執行機制,從JDK1.5開始,為了把工作單元與執行機制分離開,Executor框架誕生了,他是一個用於統一建立與執行的介面。Executor框架實現的就是執行緒池的功能。

二、Executor框架結構圖解

1、Executor框架包括3大部分:

(1)任務。也就是工作單元,包括被執行任務需要實現的介面:Runnable介面或者Callable介面

(2)任務的執行。也就是把任務分派給多個執行緒的執行機制,包括Executor介面

及繼承自Executor介面的ExecutorService介面

(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工廠類。