线程池:三大方法、7大参数、4种拒绝策略
池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。
线程池好处:1、降低资源的消耗 2、提高响应的速度 3、方便管理。线程复用、可以控制最大并发数、管理线程
提醒用图
三大方法
//也就是使用Executors工具类创建线程池的三种方法 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10); ExecutorService singlePool = Executors.newSingleThreadExecutor();
四种策略
* 4种策略 * 银行总的人数:max+queue * new ThreadPoolExecutor.AbortPolicy()银行满了,再来人就会跑出异常 * new ThreadPoolExecutor.CallerRunsPolicy()银行满了,让主线程执行 * new ThreadPoolExecutor.DiscardPolicy()队列满了,丢掉任务,不报错 * new ThreadPoolExecutor.DiscardOldestPolicy()银行满了,让进来的人和最开进银行的人进行线程竞争
七大参数
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
2, //正常营业的两个窗口
5,//银行最大的窗口数
2,//当备用的3个窗口闲置时间超过此值,就会关闭线程(窗口)
TimeUnit.SECONDS,//闲置时间的单位
new linkedBlockingQueue<>(3),//等待区等待数量阻塞队列,注意4组api
Executors.defaultThreadFactory(),//线程工程,默认不动
new ThreadPoolExecutor.DiscardPolicy()
);
⚠️ Tips:池的最大的大小如何去设置!
IO密集型(Runtime.getRuntime().availableProcessors()),CPU密集型:(假设15个io业务,就需要设置成io业务的x2,也就是30,因为io业务非常占时间)
四大函数式接口(必掌握)
函数式接口:只有一个方法的接口
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Function函数式接口
package icu.lookyousmileface.functionfour;
import java.util.function.Function;
public class FunctionUse {
public static void main(String[] args) {
// Function functionInterface = new Function() {
// @Override
// public String apply(String o) {
// System.out.println(o);
// return o;
// }
// };
// functionInterface.apply("你好");
Function functionInterface = (str)->{ System.out.println(str);return str;};
functionInterface.apply("你好!");
}
}
断定型接口:有一个输入参数,返回值只能是 布尔值!
package icu.lookyousmileface.functionfour;
import java.util.function.Predicate;
public class PredicateUse {
public static void main(String[] args) {
Predicate predicate = (Str)->{
if (Str!=null){
return true;
}
return false;
};
System.out.println(predicate.test(null));
}
}
Consumer 消费型接口
package icu.lookyousmileface.functionfour;
import java.util.function.Consumer;
public class ConsumerUse {
public static void main(String[] args) {
Consumer consumer = (str)->{System.out.println("消费:"+str);};
consumer.accept("5元");
}
}
Supplier 供给型接口
package icu.lookyousmileface.functionfour;
import java.util.function.Supplier;
public class SupplierUse {
public static void main(String[] args) {
Supplier supplier = ()->{return 1024;};
System.out.println("supplier生产:"+supplier.get());
}
}



