Java并发JUC(java.util.concurrent)线程池
【摘要】 👨🏻🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟🌈擅长领域:Java、大数据、运维、电子🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!@[TOC] 线程池是什么线程池...
👨🏻🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
@[TOC]
线程池是什么
-
线程池:三大方法、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()); } }
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)