阿里巴巴开发手册要求:
好处:
- 降低资源的消耗
- 提高响应速度
- 方便管理
三大方法(不建议这样创建
)
import java.util.concurrent.*;
public class MyThread {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//1、单个线程
ExecutorService threadPool = Executors.newSingleThreadExecutor();
//2、可伸缩的
ExecutorService threadPool2 = Executors.newCachedThreadPool();
//3、创建一个固定大小的线程池
ExecutorService threadPool3 = Executors.newFixedThreadPool(10);
try {
for (int i = 0; i < 100; i++) {
threadPool3.execute(() -> {
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool3.shutdown();//关闭线程池
}
}
}
七大参数
import java.util.concurrent.*;
public class MyThread {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService threadPool = new ThreadPoolExecutor(
2,//核心线程池大小
//最大核心线程池大小
// 1、CPU密集型(Runtime.getRuntime().availableProcessors()),计算机是几核,就是几,可以保持CPU的效率最高
//2、IO密集型 最大核心线程池大小 > 判断程序中十分耗IO的线程 一般是耗IO线程的两倍
Runtime.getRuntime().availableProcessors(),
2,//超时等待时间
TimeUnit.SECONDS,//超时单位
new LinkedBlockingDeque<Runnable>(3),//阻塞队列
Executors.defaultThreadFactory(),//线程工厂,创建线程的,一般不用动
//拒绝策略1、AbortPolicy 2、CallerRunsPolicy 3、DiscardOldestPolicy 4、DiscardPolicy
new ThreadPoolExecutor.DiscardPolicy());
try {
for (int i = 1; i <= 9; i++) {
threadPool.execute(() -> {
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
}
四种拒绝策略
AbortPolicy() //队列满了,不处理,抛出异常
CallerRunsPolicy()//哪来的回哪里去
DiscardOldestPolicy()//队列满了,尝试去和最早的竞争
DiscardPolicy()//队列满了,丢掉任务,不会抛出异常