写点什么

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

  • 2022 年 5 月 04 日
  • 本文字数:2295 字

    阅读完需:约 8 分钟


👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟🌈擅长领域:Java、消息中间件、大数据、运维。

🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏。

🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

线程池是什么

  • 线程池:三大方法、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;        /**     * @author starrysky     * @title: FunctionUse     * @projectName Juc_Pro     * @description: Function,输入,返回啥     * @date 2021/1/2911:37 下午     */    public class FunctionUse {        public static void main(String[] args) {    //        Function<String,String> functionInterface = new Function<String,String>() {    //            @Override    //            public String apply(String o) {    //                System.out.println(o);    //                return o;    //            }    //        };        //        functionInterface.apply("你好");        Function<String,String> functionInterface = (str)->{ System.out.println(str);return str;};        functionInterface.apply("你好!");        }    }
复制代码


  • 断定型接口:有一个输入参数,返回值只能是 布尔值!

    package icu.lookyousmileface.functionfour;        import java.util.function.Predicate;        /**     * @author starrysky     * @title: PredicateUse     * @projectName Juc_Pro     * @description: Predicat 判断输入的是否是想要的,返回boolean值     * @date 2021/1/2911:45 下午     */    public class PredicateUse {        public static void main(String[] args) {            Predicate<String> 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;        /**     * @author starrysky     * @title: ConsumerUse     * @projectName Juc_Pro     * @description: Consumer 消费型接口     * @date 2021/1/2911:50 下午     */    public class ConsumerUse {        public static void main(String[] args) {            Consumer<String> consumer = (str)->{System.out.println("消费:"+str);};            consumer.accept("5元");        }    }
复制代码


  • Supplier 供给型接口

    package icu.lookyousmileface.functionfour;        import java.util.function.Supplier;        /**     * @author starrysky     * @title: SupplierUse     * @projectName Juc_Pro     * @description: Supplier 生产者接口     * @date 2021/1/2911:53 下午     */    public class SupplierUse {        public static void main(String[] args) {            Supplier<Integer> supplier = ()->{return 1024;};            System.out.println("supplier生产:"+supplier.get());        }    }
复制代码


发布于: 刚刚阅读数: 2
用户头像

Java、消息中间件、大数据、运维 2022.04.23 加入

华为云云享专家、51CTOtop红人、CSDN博主、2021年第十届“中国软件杯”大学生软件设计大赛-B3-高并发条件下消息队列的设计与实现国赛二等奖、2021年浙江省职业院校技能大赛高职组“大数据技术与应用”赛项一等奖

评论

发布
暂无评论
Java并发JUC(java.util.concurrent)线程池_Java_芝士味的椒盐_InfoQ写作社区