类比银行工作
1、2、3号窗口就是核心线程,
1、2、3、4、5最大只能五个,
等待区等待队列容量3个,
public static void main(String[] args) {
ExecutorService executorService = new ThreadPoolExecutor(3, 5, 1L, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
/*
参数1;核心线程数
参数2:最大线程数
参数3:空闲线程等待时间
参数4:时间单位
参数5:等待阻塞队列
参数6:线程工厂 使用默认
参数7:拒绝策略
*/
for (int i = 0; i <3 ; i++) {
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"办理业务");
});
}
executorService.shutdown();
}
for (int i = 0; i <4 ; i++) {
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"办理业务");
});
}
还是三个窗口,等待队列会有人
当超过6个人,即窗口3个,等待队列满了3个时,
for (int i = 0; i <7 ; i++) {
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"办理业务");
});
}
会自动开放第4个窗口
for (int i = 0; i <8 ; i++) {
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"办理业务");
});
}
会自动开放第5个
超过5+3,就超过最大了,就报错
for (int i = 0; i <9 ; i++) {
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+"办理业务");
});
}
---------------------------------------------------------------------------------------------------------------------------------
异步执行
package org.example;
import java.util.concurrent.*;
public class xianchengchi {
public static void main(String[] args) {
ExecutorService executorService = new ThreadPoolExecutor(3, 5, 1L, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
//异步执行
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
System.out.println("业务1处理");
}, executorService);
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
System.out.println("业务2处理");
}, executorService);
//等待完成
CompletableFuture.allOf(future1,future2);
executorService.shutdown();
}
}