多语言展示
当前在线:1090今日阅读:167今日分享:16

java基础语法分析与探索:[1]线程池

概要:线程池的创建,本质是获取得到ThreadPoolExcutor(此处翻译成线程池)。获取线程池的方式有两种,一种是自己new一个;而另外一种由Executors.new获取一个。第一种方式,需要自己对线程池进行配置,而第二种方式,返回一个默认的线程池。线程池创建的相关类图如下:new ThreadPoolExecutor方法创建线程池及其用法第一种方式:ThreadPoolExecutor方法创建线程池及其用法第二种方式:Executors获取线程池:首先看Executor类中主要有哪些方法可以获取得到ThreadPoolExcutor,如下图:Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO,优先级)执行。线程池实现的底层机制上图来源于网站,解释部分是自己根据API进行总结。第1步:PoolSize指的是当前的任务数量。CorePoolSize指的是线程池可以存活着的线程数量。当任务线程数量小于线程池中存活着的线程数量,则直接运行,不用将任务存于阻塞队列中。第2步:当当前的任务数量PoolSize>CorePoolSize,则将多余的线程任务放到阻塞队列中。第3步:当第2步不断的累积线程任务到队列无法存的时候,将会创建新的线程到线程池中第4步:当第3步不断创建线程,直到线程池的最大容量(MaximumPoolSize)的时候,任务线程数量还是不断增加,则有RejectedExecutionHandler来进行处理。
推荐信息