# çº¿ç¨æ± åçåæ
é¦å
è¦æç¡®ä¸ºä»ä¹è¦ä½¿ç¨çº¿ç¨æ± ï¼ä½¿ç¨çº¿ç¨æ± ä¼å¸¦æ¥ä»ä¹å¥½å¤ï¼
- çº¿ç¨æ¯ç¨ç¼ºèµæºï¼ä¸è½é¢ç¹çå建ã
- åºå½å°å
¶æ¾å
¥ä¸ä¸ªæ± åä¸ï¼å¯ä»¥ç»å
¶ä»ä»»å¡è¿è¡å¤ç¨ã
- è§£è¦ä½ç¨ï¼çº¿ç¨çåå»ºäºæ§è¡å®å
¨åå¼ï¼æ¹ä¾¿ç»´æ¤ã
## å建ä¸ä¸ªçº¿ç¨æ±
以ä¸ä¸ªä½¿ç¨è¾å¤ç
```java
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler)
```
为ä¾ï¼
- å
¶ä¸ç `corePoolSize` ä¸ºçº¿ç¨æ± çåºæ¬å¤§å°ã
- `maximumPoolSize` ä¸ºçº¿ç¨æ± æå¤§çº¿ç¨å¤§å°ã
- `keepAliveTime` å `unit` åæ¯çº¿ç¨ç©ºé²åçåæ´»æ¶é´ã
- `workQueue` ç¨äºåæ¾ä»»å¡çé»å¡éåã
- `handler` å½éååæå¤§çº¿ç¨æ± 齿»¡äºä¹åç饱åçç¥ã
## å¤çæµç¨
å½æäº¤ä¸ä¸ªä»»å¡å°çº¿ç¨æ± æ¶å®çæ§è¡æµç¨æ¯ææ ·çå¢ï¼

é¦å
ç¬¬ä¸æ¥ä¼å¤ææ ¸å¿çº¿ç¨æ°ææ²¡æè¾¾å°ä¸éï¼å¦ææ²¡æåå建线ç¨(ä¼è·åå
¨å±é)ï¼æ»¡äºåä¼å°ä»»å¡ä¸¢è¿é»å¡éåã
妿éå乿»¡äºåéè¦å¤ææå¤§çº¿ç¨æ°æ¯å¦è¾¾å°ä¸éï¼å¦ææ²¡æåå建线ç¨(è·åå
¨å±é)ï¼å¦ææå¤§çº¿ç¨æ°ä¹æ»¡äºå伿 ¹æ®é¥±åçç¥å¤çã
常ç¨ç饱åçç¥æ:
- ç´æ¥ä¸¢å¼ä»»å¡ã
- è°ç¨è
线ç¨å¤çã
- 丢å¼éåä¸çæè¿ä»»å¡ï¼æ§è¡å½åä»»å¡ã
æä»¥å½çº¿ç¨æ± 宿é¢çä¹å齿¯å°ä»»å¡æ¾å
¥éåï¼æ¥çç±å·¥ä½çº¿ç¨ä¸ä¸ªä¸ªä»éåéååºæ§è¡ã
## åçé
ç½®çº¿ç¨æ±
çº¿ç¨æ± 并䏿¯é
ç½®è¶å¤§è¶å¥½ï¼èæ¯è¦æ ¹æ®ä»»å¡ççææ¥è¿è¡ååï¼
å¦ææ¯ `CPU` å¯éåä»»å¡åºå½åé
è¾å°ç线ç¨ï¼æ¯å¦ `CPU` 个æ°ç¸å½ç大å°ã
å¦ææ¯ IO å¯éåä»»å¡ï¼ç±äºçº¿ç¨å¹¶ä¸æ¯ä¸ç´å¨è¿è¡ï¼æä»¥å¯ä»¥å°½å¯è½çå¤é
置线ç¨ï¼æ¯å¦ `CPU ä¸ªæ° * 2` ã
彿¯ä¸ä¸ªæ··ååä»»å¡ï¼å¯ä»¥å°å
¶æå为 `CPU` å¯éåä»»å¡ä»¥å `IO` å¯éåä»»å¡ï¼è¿æ ·æ¥åå«é
ç½®ã