package Thread;
import java.util.concurrent.*;
public class ThreadTest {
// å½åç³»ç»ä¸çº¿ç¨æ± åªæ1-2ä¸ªï¼æ¯ä¸ªå¼æ¥ä»»å¡ï¼æäº¤ç»çº¿ç¨æ± 廿§è¡
public static ExecutorService service = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
/*
* 1) ç»§æ¿Thread
* Thread01 thread = new Thread01();
* thread.start();
* 2) å®ç°Runnableæ¥å£
* Runnable01 runnable01 = new Runnable01();
* new Thread(runnable01).start();
* 3) å®ç°Callableæ¥å£ + FutureTask (å¯ä»¥æ¿å°è¿åç»æï¼å¯ä»¥å¤çå¼å¸¸)
* FutureTask futureTask = new FutureTask<>(new Callable01());
* new Thread(futureTask).start();
* // ä¸åç¹ï¼çº¿ç¨æ§è¡å®æå¯ä»¥æ¿å°è¿åç»æ
* Integer integer = futureTask.get();
* System.out.println(integer);
* 4) çº¿ç¨æ±
* ç»çº¿ç¨æ± ç´æ¥æäº¤ä»»å¡
* service.execute(new Runnable01());
* 1ãå建
* 1) Executors
* 2) new ThreadPoolExecutor
*
* åºå«ï¼
* Threadä¸Runnableä¸è½å¾å°è¿åå¼ï¼Callableå¯ä»¥è·åè¿åå¼ã
* 以ä¸ä¸ç§æ¹å¼é½ä¸è½æ§å¶èµæºã
* çº¿ç¨æ± å¯ä»¥æ§å¶èµæºï¼æ§è½ç¨³å®ã
*/
/*
* ä¸å¤§åæ°ï¼
* corePoolSize: æ ¸å¿çº¿ç¨æ°ï¼çº¿ç¨æ± åå»ºå®æåå°±åå¤å°±ç»ªççº¿ç¨æ°éï¼çå¾
æ¥æ¥å弿¥ä»»å¡å»æ§è¡ãï¼
* maximumPoolSize: æå¤§çº¿ç¨æ°éï¼æ§å¶èµæºï¼ã
* keepAliveTime: åæ´»æ¶é´ï¼å½åçº¿ç¨æ°éå¤§äºæ ¸å¿æ°éï¼éæ¾ç©ºé²ççº¿ç¨ [åªè¦çº¿ç¨ç©ºé²å¤§äºæå®çkeepAliveTime]ï¼ã
* unit: æ¶é´åä½
* BlockingQueue workQueue: é»å¡éåã妿任塿å¾å¤ï¼å°±ä¼å°ç®åå¤ç任塿¾å¨éåéé¢ã
* åªè¦çº¿ç¨ç©ºé²ï¼å°±ä¼å»éåéé¢ååºæ°çä»»å¡ç»§ç»æ§è¡ã
* threadFactory: 线ç¨çå建工åã
* handler: 妿éåæ»¡äºï¼æç
§æä»¬æå®çæç»çç¥æç»æ§è¡ä»»å¡ã
* å·¥ä½é¡ºåºï¼
* 1ãçº¿ç¨æ± å建ï¼åå¤å¥½æ ¸å¿çº¿ç¨æ°ï¼å夿¥åä»»å¡ã
* 2ãæ°ä»»å¡è¿æ¥ï¼ç¨æ ¸å¿çº¿ç¨ä¸ç空é²çº¿ç¨æ§è¡ã
* 1ï¼æ ¸å¿çº¿ç¨æ»¡ï¼é£ä¹åæ°è¿æ¥ç任塿¾å
¥é»å¡éåä¸ã空é²çæ ¸å¿çº¿ç¨å°±ä¼èªå·±å»é»å¡éåè·å任塿§è¡.
* 2ï¼é»å¡éåæ»¡äºï¼å°±ç´æ¥å¼æ°çº¿ç¨æ§è¡ï¼æå¤§åªè½å¼å°maxæå®çæ°é
* 3ï¼maxæ§è¡å¥½äºãmax-coreæ°éç空é²çº¿ç¨ä¼å¨keepAliveTimeæå®çæ¶é´åèªå¨éæ¯ãæç»ä¿æå¨æ ¸å¿çº¿ç¨æ°ç大å°ã
* 4ï¼å¦æçº¿ç¨æ°å¼å°äºmaxçæ°éï¼è¿ææ°ä»»å¡è¿æ¥ï¼å°±ä¼ä½¿ç¨rejectæå®çæç»çç¥è¿è¡å¤çã
* 3ãææç线ç¨åå»ºé½æ¯ç±æå®ç factory å建ã
*/
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 200, 10, TimeUnit.SECONDS,
new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
// å建ä¸ä¸ªå¯ç¼åçº¿ç¨æ± ï¼å¦æçº¿ç¨æ± é¿åº¦è¶
è¿å¤çéè¦ï¼å¯çµæ´»åæ¶ç©ºé²çº¿ç¨ï¼è¥æ å¯åæ¶ï¼åæ°å»ºçº¿ç¨ã
ExecutorService cachedService = Executors.newCachedThreadPool();
// åºå®å¤§å°
ExecutorService newFixedService = Executors.newFixedThreadPool(10);
// 宿¶ä»»å¡ççº¿ç¨æ±
Executors.newScheduledThreadPool(10);
// å线ç¨ççº¿ç¨æ±
Executors.newSingleThreadExecutor();
System.out.println("Mainæ¹æ³ç»æ");
}
static class Thread01 extends Thread{
@Override
public void run() {
System.out.println("å½å线ç¨ï¼" + Thread.currentThread().getId());
int i = 1;
System.out.println("è¿è¡ç»æï¼" + i);
}
}
static class Runnable01 implements Runnable{
@Override
public void run() {
System.out.println("å½å线ç¨ï¼" + Thread.currentThread().getId());
int i = 1;
System.out.println("è¿è¡ç»æï¼" + i);
}
}
static class Callable01 implements Callable{
@Override
public Integer call() throws Exception {
System.out.println("å½å线ç¨ï¼" + Thread.currentThread().getId());
int i = 1;
System.out.println("è¿è¡ç»æï¼" + i);
return i;
}
}
}