高并发之线程池

首先我们要在了解线程池之前了解一下什么时对象池(资源池)

  • 对象池也就是一般拿来存放一些资源的东西,客户端向池中申请请求,并返回资源池进行的指定操作,当使用完之后,会把资源放回资源池中而不是处理掉!

应用场景

  • 当初始化对象的过程中代价大或者使用频率特别高的时候,我们能使用“池”的这种技术可以提升性能

线程池的一些类说明

  • ExecutorService : 最底层线程池接口
  • ScheduledExectorService : 定时任务与线程池功能结合类
  • ThreadPoolExecutor : ExecutorService的实现类(重点常用)
  • ScheduledThreadPoolExecutor :定时周期性的ExecutorService实现类

常用的线程池方法

  • Executor中

中只有一个方法就时execute()执行提交Runnable,通常来启动线程

  • ExecutorService中
  1. submit()可以提交一个可运行的线程Callable或者可提交Runnable返回该任务的结果
  2. shutdown() 关闭线程池,等待已启动的线程终止
  3. shutdownNow()关闭线程池,尝试停止所有的正在执行或暂停任务的线程后
  4. isTerminated() 在所有任务关闭后返回true
  • ScheduledExecutorService
  1. schedule(Runnable , long, TimeUnit)

ExecutorService工作原理

image

ExecutorService创建过程

ExecutorService中的构造方法

参数概要
corePoolSize(必填)池中所保存的线程数,包括空闲线程。
maximumPoolSize(必填)池中允许的最大线程数。
keepAliveTime(必填)当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit - keepAliveTime(必填)时间单位。
workQueue(必填)执行前用于保持任务的队列。此队列仅保持由 execute方法提交的 Runnable任务。
threadFactory执行程序创建新线程时使用的工厂
handler由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。

步骤

 private static int TASK_COUNT = 10;
    public static void main(String[] args) {
        /*1. 创建线程池对象 */
        ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 8, 1, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5));
        /*2. 提交任务*/
        for (int i = 0; i < TASK_COUNT; i++) {
            pool.execute(() -> {
                System.out.println(Thread.currentThread().getName() + ":----->在执行任务");
            });
        }
        /*3. 关闭连接池*/
        pool.shutdown();
       /* 或者 */
     // pool.shutdownNow()
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值