java线程池 四种线程池

1.  多线程

     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力

2. 线程池的作用

     线程池技术正是关注如何缩短或调整创建线程、销毁线程时间的技术,从而提高服务器程序性能的

          a) 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务

          b) 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

自定义线程池:ThreadPoolExecutor:创建自定义线程池,自定义线程池

      ArrayBlockingQueue:有界缓存等待队列,可以指定缓存队列的大小,当正在执行的线程数等于corePoolSize时,多余的元素缓存在ArrayBlockingQueue队列中等待有空闲的线程时继续执行

// 创建数组型缓冲等待队列
BlockingQueue<Runnable> bq = new ArrayBlockingQueue<Runnable>(20);
// ThreadPoolExecutor(自定义线程池):池中运行的线程数,允许最大挂起的线程数,线程销毁时间,线程销毁时间格式,队列保留
ThreadPoolExecutor tpe = new ThreadPoolExecutor(1, Integer.MAX_VALUE, 60, TimeUnit.SECONDS, bq);

     线程中可用的时间格式:

TimeUnit.DAYS//天
TimeUnit.HOURS//小时
TimeUnit.MINUTES//分钟
TimeUnit.SECONDS//秒
TimeUnit.MILLISECONDS//毫秒

对自定义线程池的四种定义

    a. 可回收缓存线程池:newCachedThreadPool(同时运行线程数:无限大,最大挂起线程数:无限大 线程销毁时间:60S )

    队列方式 SynchronousQueue:没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。

//创建一个可缓存线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

    b.可控最大并发数线程池:newFixedThreadPool (同时运行线程数:参数 最大挂起线程数:参数 线程销毁时间:运行完后直接销毁)

    队列方式 LinkedBlockingQueue :无界缓存等待队列。当前执行的线程数量达到corePoolSize(参数*2)的数量时,剩余的元素会在阻塞队列里等待

//可重用固定个数的线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);

    c.定时与周期性任务线程池:newScheduledThreadPool(同时运行线程数:参数 最大挂起线程数:无限大 线程销毁时间:运行完成直接销毁)

    队列方式 DelayedWorkQueue :优先级队列,只能用来存储RunnableScheduledFutures任务。堆是实现优先级队列的最佳选择,而该队列基于堆数据结构的实现

//定长线程池,支持定时及周期性任务执行——定期执行
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
//initialDelay:延迟秒数,period:执行间隔  unit:时间格式
scheduledThreadPool.scheduleAtFixedRate(reviewStatus, 0, 3, TimeUnit.SECONDS);

     d.单线程化线程池:newSingleThreadExecutor (同时运行线程数:1个 挂起线程数量:1个 线程销毁时间:运行完成直接销 毁)

     队列方式 LinkedBlockingQueue:无界缓存等待队列。当前执行的线程数量达到corePoolSize(参数*2)的数量时,剩余的元素会在阻塞队列里等待

//单线程化的线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值