我是靠谱客的博主 幸福刺猬,最近开发中收集的这篇文章主要介绍对线程池的理解什么是线程池:线程池的参数:BlockingQueue:工作队列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

什么是线程池:

线程池所涉及到的类:

线程池的参数:

corePoolSize:

maximumPoolSize:

keepAliveTime、TimeUnit:

BlockingQueue:

ThreadFactory:

RejectedExecutionHandler:


什么是线程池:

线程池是一种技术,使用线程池来管理维护线程,比手动创建更加安全,快捷,因为线程是一种稀

缺资源,无限制的过度创建,可能会威胁到系统的稳定性,同时线程的创建和销毁都会付出额外的

性能消耗,而线程池就像一个蓄水的池子,将线程都存放在里面,到需要的时候,可以直接去使

用。

线程池所涉及到的类:

Java标准库提供了如下几个类或接口,来操作并使用线程

  • ExecutorService接口:来进行管理操作线程池;
  • Executors类:用于创建线程池的工具类;
  • ThreadPoolExecutor及其子类:线程池;
    public class Pools {
    	public static void main(String[] args) {
    		
    		// 根据任务调整线程的线程池
    		ExecutorService pool1 = Executors.newCachedThreadPool();
    		
    		// 线程数固定的线程池
    		ExecutorService pool2 = Executors.newFixedThreadPool(5);
    		
    		// 单线程的线程池
    		ExecutorService pool3 = Executors.newSingleThreadExecutor();
    		
    		// 延迟执行的线程池
    		ExecutorService pool4 = Executors.newScheduledThreadPool(2);
    
    	}
    
    }
    

通过各个线程池的源码查看,他们获得或少都有着相同的参数

线程池的参数:

线程池的参数可分为:corePoolSize、maximumPoolSize、keepAliveTime、TimeUnit、

BlockingQueue、ThreadFactory RejectedExecutionHandler

corePoolSize:核心线程数

核心线程数,也就是线程池中最小维护的线程池。

在  newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,

newCachedThreadPool 线程池中,核心线程数为0,

newSingleThreadExecutor  线程中核心线程数为1,

newScheduledThreadPool线程池中,核心线程数与传入的参数相同。

maximumPoolSize:最大线程数

最大线程数,就是线程池中,最多可以维护的线程数。

在  newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,都等于传入的参数

newCachedThreadPool 线程池中,最大线程数等于Integer.MAX_VALUE,即 1247483647

newSingleThreadExecutor  线程中,最大线程数等于1,

newScheduledThreadPool线程池中,最大线程数与传入的参数相同。

keepAliveTime、TimeUnit:非核心线程最多可以存活的时间

在  newFixedThreadPool 线程池中,非核心线程可以存活时间为:0

newCachedThreadPool 线程池中,非核心线程可以存活时间为:60 秒

newSingleThreadExecutor  线程中,非核心线程可以存活时间为:0

newScheduledThreadPool线程池中,非核心线程可以存活时间为:0

BlockingQueue:工作队列

工作队列,或者说是等待队列,用来储存等待中的任务。

常见的等待队列有 :

  • ArrayBlockingQueue 固定长度,基于数组实现的队列
  • LinkedBlockingQueue 是一个无界的,基于链表实现的队列
  • DelayedWorkQueue 是基于堆结构的延迟队列,基于数组实现,初始容量为 16
  • PriorityBlockingQueue 优先级队列,是无界的队列
  • SynchronousQueue同步队列,不存储元素的工作队列。

在  newFixedThreadPool 线程池中,工作队列为:LinkedBlockingQueue

在  newCachedThreadPool 线程池中,工作队列为:SynchronousQueue

在  newSingleThreadExecutor  线程中,工作队列为:LinkedBlockingQueue

在  newScheduledThreadPool线程池中,工作队列为:DelayedWorkQueue

ThreadFactory:线程工厂

线程工厂,创建和销毁线程,以及设置线程的名称

RejectedExecutionHandler:拒绝策略

常见的拒绝策略有:

  • AbortPolicy  默认拒绝策略,丢弃任务并抛出 RejectedExecutionException
  • DiscardPolicy :丢弃任务但是不抛出异常
  • DiscardOidestPolicy : 丢弃最旧的的任务,即最早进入队列的任务
  • CallerRunsPolicy  :交给调用线程池的线程处理

在  newFixedThreadPool 线程池中,拒绝策略为:AbortPolicy

在  newCachedThreadPool 线程池中,拒绝策略为:AbortPolicy

在  newSingleThreadExecutor  线程中,拒绝策略为:AbortPolicy

在  newScheduledThreadPool线程池中,拒绝策略为:AbortPolicy

最后

以上就是幸福刺猬为你收集整理的对线程池的理解什么是线程池:线程池的参数:BlockingQueue:工作队列的全部内容,希望文章能够帮你解决对线程池的理解什么是线程池:线程池的参数:BlockingQueue:工作队列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部