java高并发

2021-11-29 20:07发布

高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?

高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?


9条回答
aijingda
2021-12-13 10:34

Java线程池概念

顾名思义,管理线程的池子,相比于手工创建、运行线程,使用线程池,有如下优点

  • 降低线程创建和销毁线程造成的开销

  • 提高响应速度。任务到达时,相对于手工创建一个线程,直接从线程池中拿线程,速度肯定快很多

  • 提高线程可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统稳定性,使用线程池可以进行同意分配、调优和监控

Java线程池创建

无论是创建何种类型线程池(FixedThreadPoolCachedThreadPool...),均会调用ThreadPoolExecutor构造函数,下面详细解读各个参数的作用

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }
  • corePoolSize:核心线程最大数量,通俗点来讲就是,线程池中常驻线程的最大数量

  • maximumPoolSize:线程池中运行最大线程数(包括核心线程和非核心线程)

  • keepAliveTime:线程池中空闲线程(仅适用于非核心线程)所能存活的最长时间

  • unit:存活时间单位,与keepAliveTime搭配使用

  • workQueue:存放任务的阻塞队列

  • handler:线程池饱和策略

一周热门 更多>