栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

线程池(重点)

线程池:三大方法、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());
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号