博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程池? 如何设计一个动态大小的线程池,有哪些方法?
阅读量:6590 次
发布时间:2019-06-24

本文共 1351 字,大约阅读时间需要 4 分钟。

【线程池?  如何设计一个动态大小的线程池,有哪些方法?】

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

系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。此时,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。

与数据库连接池相似,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()call()方法,当run()call()方法执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个Runnable对象的run()call()方法。

使用线程池可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,会导致系统剧烈下降,甚至JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过此数。

 

 

 

设计一个动态大小的线程池,如何设计,应该有哪些方法?

一个线程池包括四个基本部分:

1 线程管理器(ThreadPool):用于创建并管理线程池,包括创建线程、销毁线程池、添加新任务。

2 工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务。

3 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口、任务执行 完后的收尾工作、任务的执行状态等。

4 任务队列(TaskQueue):用于存放没有处理的任务,提供一种缓冲机制。

 

 

所包含方法:

private ThreadPool()  创建线程池

public static ThreadPool getThreadPool()  获得一个默认线程个数的线程池

public void ececute(Runnable task) 执行任务,其实只是把任务加入任务队列,什么时候执行由线程池管理器决定

public void execute(Runnable[] task)批量执行任务,其实只是把任务加入任务队列,什么时候执行由线程池管理器决定

public void destroy() 销毁线程池,该方法保证在所有任务都完成的情况下才销毁所有线程,否则等待任务完成才销毁

public int getWork ThreadNumber() 返回工作线程的个数

public int getFinishedTasknumber() 返回已完成任务的个数,这里的已完成是指出了任务队列的任务个数,可能改任务 并没有实际执行完成

public void addThread() 在保证线程池中所有线程正在执行,并且要执行线程的个数大于某一值时,增加线程池中的 线程个数

public void reduceThread()在保证线程池中有很大一部分线程处于空闲状态,并且空闲状态的线程在小于某一个值时, 减少线程池中线程的个数

 

转载于:https://www.cnblogs.com/wangyichuan/p/5967949.html

你可能感兴趣的文章
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
jdk和jre是什么?都有什么用?(转帖)
查看>>
zw版_zw中文增强版Halcon官方Delphi例程
查看>>
2018-2019-1 20165302 《信息安全系统设计基础》第三周学习总结
查看>>
发布 学习进度条 博客要求
查看>>
显示桌面图标不见了的解决方法
查看>>
PIC单片机开发工具
查看>>
Linux实战教学笔记14:用户管理初级(上)
查看>>
vector的常用总结
查看>>
C#遍历指定文件夹中的所有文件
查看>>
【hdu 4859】海岸线(图论--网络流最小割)
查看>>
Mac 下显示隐藏文件或文件夹
查看>>
51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】
查看>>
树形DP题目集合
查看>>
妙用next数组打表求最小循环节len
查看>>
hdu 2099 整数的尾数 http://acm.hdu.edu.cn/showproblem.php?pid=2099
查看>>
python中函数 reshape(-1,1)
查看>>
设备驱动基础学习--/proc下增加节点
查看>>
Java成员的访问权限控制
查看>>
设计模式(十)外观模式
查看>>