什么是线程池?线程池创建的方式?让你设计一个动态大小的线程池,如何设计,应该有哪些方法?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dennis_Wu_/article/details/82049907

线程池
线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。

线程池创建的方式
Java通过 Executors 提供四种线程池,分别为:
newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

设计一个动态大小的线程池,如何设计,应该有哪些方法
一个线程池包括以下四个基本组成部分:
线程管理器 (ThreadPool):用于创建并管理线程池,包括创建线程,销毁线程池,添加新任务;
工作线程 (PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
任务接口 (Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
任务队列 (TaskQueue):用于存放没有处理的任务。提供一种缓冲机制;
所包含的方法
private ThreadPool() 创建线程池
public static ThreadPool getThreadPool() 获得一个默认线程个数的线程池
public void execute(Runnable task) 执行任务,其实只是把任务加入任务队列,什么时候执行有线程池管理器决定
public void execute(Runnable[] task) 批量执行任务,其实只是把任务加入任务队列,什么时候执行有线程池管理器决定
public void destroy() 销毁线程池,该方法保证在所有任务都完成的情况下才销毁所有线程,否则等待任务完成才销毁
public int getWorkThreadNumber() 返回工作线程的个数
public int getFinishedTasknumber() 返回已完成任务的个数,这里的已完成是只出了任务队列的任务个数,可能该任务并没有实际执行完成
public void addThread() 在保证线程池中所有线程正在执行,并且要执行线程的个数大于某一值时。增加线程池中线程的个数
public void reduceThread() 在保证线程池中有很大一部分线程处于空闲状态,并且空闲状态的线程在小于某一值时,减少线程池中线程的个数

猜你喜欢

转载自blog.csdn.net/Dennis_Wu_/article/details/82049907
今日推荐