Java线程池原理及实现

一.为什么要用线程池?
在我们完成一个需要多个线程并发进行的任务时,我们可能会觉得那就多创建几个线程就好了,就像前面的多线程小球,一个线程负责一个小球的运动,这样实现起来会简单些,但是当线程完成一个任务时,就要销毁它,这样不断的创建销毁线程会造成很大的内存开销,其实执行任务只需要很短的时间,但创建和销毁他们会花费很大的时间,这样就降低了系统的效率,所以我们需要一个线程池,需要线程的时候就创建,但执行完任务后可以继续去执行其他的任务,不需要销毁。

二.原理如何?
java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。

public class ThreadPoolExecutor extends AbstractExecutorService {
    .....
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
            BlockingQueue<Runnable> workQueue);
 
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
            BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory);
 
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
            BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler);
 
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
        BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
    ...
}

下面看一下每一个参数的含义:

  • corePoolSize:核心线程池的数量,在开始创建线程池时,默认线程个数为0,开始处理任务由核心线程来完成,当线程数超过核心线程数时,就会把任务放到阻塞队列中。
  • aximumPoolSize:线程池允许的最大线程数
  • keepAliveTime:普通线程的最多空闲时间,当超过这个时间就会被销毁
  • TimeUnit unit:空闲时间单位,有下面七种
TimeUnit.DAYS;               //天
TimeUnit.HOURS
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值