1.三大方法`
package com.king.pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
//Executors 工具类,三大方法
public class Demo01 {
public static void main(String[] args) {
// ExecutorService threadPool = Executors.newSingleThreadExecutor();//单个线程
// ExecutorService threadPool = Executors.newFixedThreadPool(5); //创建一个固定的线程池大小
ExecutorService threadPool = Executors.newCachedThreadPool(); //可伸缩的,遇强则强,遇弱则弱
try {
for (int i = 0; i < 100; i++) {
//使用了线程池之后,使用线程池创建线程
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+"ok");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
//线程池用完,程序结束,关闭线程池
threadPool.shutdown();
}
}
}
2.四种拒绝策略
package com.king.pool;
import java.util.concurrent.*;
//Executors 工具类,三大方法
public class Demo02 {
public static void main(String[] args) {
//自定义线程池!工作ThreadPoolExecutor
ExecutorService threadPool = new ThreadPoolExecutor(
2,
5,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
//1.AbortPolicy()报错
// 2.CallerRunsPolicy()返回到原来方法
// 3.DiscardPolicy()超出了,但不会抛出异常
//4..DiscardOldestPolicy()队列满了,会尝试和最早的竞争,不抛异常
new ThreadPoolExecutor.DiscardOldestPolicy());
try {
//最大承载:Deque + max
for (int i = 1; i <= 9; i++) {
//使用了线程池之后,使用线程池创建线程
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+"ok");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
//线程池用完,程序结束,关闭线程池
threadPool.shutdown();
}
}
}
3.调优
//最大线程到底怎么定义
//1.CPU 密集型,几核,就是几,可以保持CPU的效率最高!
//2.IO 密集型,判断你程序中十分耗IO的线程
// 程序 15个大型任务 io十分占资源
//调优:Runtime.getRuntime().availableProcessors(),