Java线程池

一、JDK自带的四种线程池

        1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过了处理当前任务的需要,可灵活的回收空闲的线程。

        2、newFixedThreadPool 创建一个定长线程池,可控线程最大并发数,超出的线程会在队列中等待

        3、newScheduledThreadPool创建一个定长线程池,支持周期性任务执行。

        4、newSingleThreadPool 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务。

public static void main(String[] args) throws ExecutionException, InterruptedException {
        //可缓存的线程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //定长线程池
        ExecutorService pool1 = Executors.newFixedThreadPool(5);
        //定长线程池,支持定时及周期性任务
        ScheduledExecutorService pool2 = Executors.newScheduledThreadPool(5);
        //单线程化的线程池
        ExecutorService pool3 = Executors.newSingleThreadExecutor();

        for (int i = 0; i < 5; i++) {
            pool1.submit(() -> {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                System.out.println("hello pool");
            });
        }
    }

二、自定义线程池(推荐使用)

        通过查看上面线程的源码,我们可以试着模仿进行自定义线程池。

                

        可以看到 newFixedThreadPool 实现线程池是通过ThreadPoolExecutor对象,传入需要的参数进行创建。

        下面介绍一下线程池中参数的意义:

corePoolSize核心线程数,线程池里的线程数量,核心线程池大小
maximumPoolSize最大线程数,线程池里的最大线程数量
keepAliveTime当线程池线程数量大于corePoolSize时候,多出来的空闲线程,多长时间会被销毁
unit时间单位,TimeUnit
workQueue任务队列,用于存放提交但是尚未被执行的任务
threadFactory线程工厂,用于创建线程,线程工厂就是给我们new线程的
handler所谓拒绝策略,是指将任务添加到线程池中时,线程池拒绝该任务所采取的相应策略

 

 ExecutorService executor = new ThreadPoolExecutor(5, 8, 5, TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>());

拒绝策略呢?我没弄上去,因为它有默认的,那么下面介绍一下它自带的四种拒绝策略,当然拒绝策略也可以自己定义,参考它自带的拒绝策略写就行了。

  • AbortPolicy:直接抛出异常,默认策略;
  • CallerRunsPolicy:用调用者所在的线程来执行任务;
  • DiscardOldestPolicy:丢弃阻塞队列中最靠前的任务,并执行当前任务;
  • DiscardPolicy:直接丢弃任务;

我们看源码,它自带的拒绝策略是AbortPolicy

 当然它还自带了默认的线程工厂,线程工厂就是创建线程的,也可以自定定义,还是参考源码。

三、总结

        那么java中线程池的创建和使用就介绍到这了。如果以后有机会的话,我会深入源码研究,再写一些详细的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值