欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java并发JUC(java.util.concurrent)线程池

时间:2023-07-07
线程池(重点)

线程池:三大方法、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()); }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。