线程池(三七四)

导读:本篇文章讲解 线程池(三七四),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

线程池

在这里插入图片描述

线程池:三大方法。七大参数。4种拒绝策略

池化技术;
程序的运行,是占用系统的资源的! 优化资源的使用,===>池化技术;
线程池,连接池,内存池,对象池…创建 ,销毁,十分的浪费资源。。
池化技术:事先准备好一些资源,有人要用,就在这里来拿,用完之后还给我。

线程池的好处:
1:降低资源的消耗。
2:提高响应的速率。
3:方便管理。
线程的复用,可以控制最大的并发量,管理线程;

三大方法:

//ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程
//ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一个固定的线程池大小;
//ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩的,

七大参数:

public ThreadPoolExecutor(int corePoolSize,   //可以同时进行的大小
                              int maximumPoolSize,  //最大的容量大小  
                              long keepAliveTime,  //等待时长
                              TimeUnit unit,  //等待时长的单位
                              BlockingQueue<Runnable> workQueue,  //候客区的大小;
                              ThreadFactory threadFactory,  // 默认的执行器;
                              RejectedExecutionHandler handler)   //四种拒绝策略;

四种拒绝策略

4四种拒绝策略


在这里插入图片描述

  • 1:new ThreadPoolExecutor.AbortPolicy() // 银行满了,还有人要进来,不处理这个人,抛出异常.
  • 2:new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里;
  • 3:new ThreadPoolExecutor.DiscardPolicy() //队列满了,不会抛出异常.
  • 4:new ThreadPoolExecutor.DiscardOldestPolicy()
  •        被拒绝任务的处理程序,丢弃最旧的未处理任请求,然后重试{@code execute},
    
  •         除非执行器被关闭,在这种情况下,任务被丢弃。
    
package com.baidu.pool;

import java.util.concurrent.*;

/**
 * 4四种拒绝策略
 * 1:new ThreadPoolExecutor.AbortPolicy()  // 银行满了,还有人要进来,不处理这个人,抛出异常.
 * 2:new ThreadPoolExecutor.CallerRunsPolicy()  // 哪来的去哪里;
 * 3:new ThreadPoolExecutor.DiscardPolicy() //队列满了,不会抛出异常.
 * 4:new ThreadPoolExecutor.DiscardOldestPolicy()
 *                 //被拒绝任务的处理程序,丢弃最旧的未处理任请求,然后重试{@code execute},
 *                 // 除非执行器被关闭,在这种情况下,任务被丢弃。
 */
public class Demo01 {

    public static void main(String[] args) {
        //自定义线程池

        //三大方法;
        //ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程
        //ExecutorService threadPool = Executors.newFixedThreadPool(5);  // 创建一个固定的线程池大小;
        //ExecutorService threadPool = Executors.newCachedThreadPool();  // 可伸缩的,


        /*
        最大的线程到底该如何定义那;
        1:CPU 密集型,电脑是几核的,就是几.可以保持CPU 的效率最高;
        2:IO 密集型 判断你的程序十分耗IO的线程, 设置成它的2 倍,就差不多了...15个大型的任务, 设置成30;;
         */


        //ThreadPoolExecutor的七大参数
        ExecutorService threadPool = new ThreadPoolExecutor(
                2,  //可以同时进行的大小
                Runtime.getRuntime().availableProcessors(),// 代码获得本机电脑的几核;  //最大的容量大小
                3,  //等待时长
                TimeUnit.SECONDS,  // 等待单位
                new LinkedBlockingDeque<>(3),  //候客区的大小;
                Executors.defaultThreadFactory(), // 默认的执行器;
                new ThreadPoolExecutor.DiscardOldestPolicy() //也不会抛出异常
                //被拒绝任务的处理程序,丢弃最旧的未处理任请求,然后重试{@code execute},
                // 除非执行器被关闭,在这种情况下,任务被丢弃。
        );

        try {

            //最大承载数:Max +  LinkedBlockingDeque,超出最大承载数,抛出异常
            //java.util.concurrent.RejectedExecutionException:
            for (int i = 1; i <= 10; i++) {
                //使用线程池之后,使用线程池来创建线程;
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+":OK");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //线程池用完之后,程序结束,关闭线程池,
            threadPool.shutdown();
        }


    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71872.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!