### ExecutorService ççè§£ä¸ä½¿ç¨ ###
æ¥å£ java.util.concurrent.ExecutorService 表述äºå¼æ¥æ§è¡çæºå¶ï¼å¹¶ä¸å¯ä»¥è®©ä»»å¡å¨åå°æ§è¡ãä¸ä¸ª ExecutorService å®ä¾å æ¤ç¹å«åä¸ä¸ªçº¿ç¨æ± ãäºå®ä¸ï¼å¨ java.util.concurrent å
ä¸ç ExecutorService çå®ç°å°±æ¯ä¸ä¸ªçº¿ç¨æ± çå®ç°ã
#### ExecutorService æ ·ä¾ ####
```java
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
}
});
executorService.shutdown();
```
é¦å
ä½¿ç¨ newFixedThreadPool() 工忹æ³å建壹å ExecutorService ï¼ä¸è¿°ä»£ç å建äºå£¹åå¯ä»¥å®¹çº³10å线ç¨ä»»å¡ççº¿ç¨æ± ãå
¶æ¬¡ï¼å execute() æ¹æ³ä¸ä¼ é壹å弿¥ç Runnable æ¥å£çå®ç°ï¼è¿æ ·åä¼è®© ExecutorService ä¸çæåçº¿ç¨æ§è¡è¿å Runnable 线ç¨ã
#### ä»»å¡çå§æï¼Task Delegationï¼ ####
䏿¹å±ç¤ºäºä¸ä¸ªçº¿ç¨çæä»»å¡å§æå¼æ¥æ§è¡çExecutorServiceç示æå¾ã

壹æ¦çº¿ç¨æä»»å¡å§æç» ExecutorServiceï¼è¯¥çº¿ç¨å°±ä¼ç»§ç»æ§è¡ä¸è¿è¡ä»»å¡æ å
³çå
¶å®ä»»å¡ã
#### ExecutorService çå®ç° ####
ç±äº ExecutorService åªæ¯å£¹åæ¥å£ï¼ä½ 壹ééè¦ä½¿ç¨å®ï¼é£éº½å°±éè¦æä¾å£¹å该æ¥å£çå®ç°ãExecutorService æ¥å£å¨ java.util.concurrent å
䏿å¦ä¸å®ç°ç±»ï¼
* ThreadPoolExecutor
* ScheduledThreadPoolExecutor
#### å建壹å ExecutorService ####
ä½ å¯ä»¥æ ¹æ®èªå·±çéè¦æ¥å建壹å ExecutorService ï¼ä¹å¯ä»¥ä½¿ç¨ Executors å·¥åæ¹æ³æ¥å建壹å ExecutorService å®ä¾ãè¿éæå åå建 ExecutorService çä¾åï¼
```java
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
ExecutorService executorService2 = Executors.newFixedThreadPool(10);
ExecutorService executorService3 = Executors.newScheduledThreadPool(10);
```
#### ExecutorService ä½¿ç¨æ¹æ³ ####
è¿éæå ç§ä¸åçæ¹å¼è®©ä½ å°ä»»å¡å§æç»å£¹å ExecutorServiceï¼
* execute(Runnable)
* submit(Runnable)
* submit(Callable)
* invokeAny(...)
* invokeAll(...)
æä¼å¨æ¥ä¸æ¥çå
容鿿¯åæ¹æ³é½ç壹éã
#### execute(Runnable) ####
æ¹æ³ execute(Runnable) æ¥æ¶å£¹å java.lang.Runnable 对象ä½ä¸ºåæ°ï¼å¹¶ä¸ä»¥å¼æ¥çæ¹å¼æ§è¡å®ãå¦ä¸æ¯å£¹åä½¿ç¨ ExecutorService æ§è¡ Runnable çä¾åï¼
```java
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
}
});
executorService.shutdown();
```
使ç¨è¿ç§æ¹å¼æ²¡æåæ³è·åæ§è¡ Runnable ä¹åçç»æï¼å¦æä½ 叿è·åè¿è¡ä¹åçè¿åå¼ï¼å°±å¿
é¡»ä½¿ç¨ æ¥æ¶ Callable åæ°ç execute() æ¹æ³ï¼åè
å°ä¼å¨ä¸æä¸æå°ã
#### submit(Runnable) ####
æ¹æ³ submit(Runnable) åæ ·æ¥æ¶å£¹å Runnable çå®ç°ä½ä¸ºåæ°ï¼ä½æ¯ä¼è¿å壹å Future 对象ãè¿å Future 对象å¯ä»¥ç¨äºå¤æ Runnable æ¯å¦ç»ææ§è¡ãå¦ä¸æ¯å£¹å ExecutorService ç submit() æ¹æ³çä¾åï¼
```java
Future future = executorService.submit(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
}
});
//妿任å¡ç»ææ§è¡åè¿å null
System.out.println("future.get()=" + future.get());
```
ä¸è¿°æ ·ä¾ä»£ç ä¼è¾åºå¦ä¸ç»æï¼
1 Asynchronous Callable
2 future.get() = Callable Result
#### inVokeAny() ####
æ¹æ³ invokeAny() æ¥æ¶å£¹åå
å« Callable 对象çéåä½ä¸ºåæ°ãè°ç¨è¯¥æ¹æ³ä¸ä¼è¿å Future 对象ï¼èæ¯è¿åéå䏿壹å Callable 对象çç»æï¼è䏿 æ³ä¿è¯è°ç¨ä¹åè¿åçç»ææ¯åªå£¹å Callableï¼åªç¥é宿¯è¿äº Callable ä¸å£¹åæ§è¡ç»æç Callable 对象ã
妿壹åä»»å¡è¿è¡å®æ¯æè
æåºå¼å¸¸ï¼æ¹æ³ä¼åæ¶å
¶å®ç Callable çæ§è¡ã
以䏿¯å£¹åæ ·ä¾ï¼
```java
ExecutorService executorService = Executors.newSingleThreadExecutor();
Set