、 内存泄露,内存溢出的区别:
内存泄漏:占用内存迟迟不能释放
内存溢出:申请内存时,没有足够的内存
、 线程池,线程组
假设一个服务器完成一项任务所需时间为:创建线程时间,在线程中执行任务的
时间,销毁线程时间。
如果:远大于 ,则可以采用线程池,以提高服务器性能。
线程池:就是刚开始初始化很多线程,减少频繁新建线程,销毁线程的时间,主要是
提高线程的使用效率
、线程池管理器():用于创建并管理线程池,包括 创建线程池,销毁线
程池,添加新任务;
、工作线程():线程池中线程,在没有任务时处于等待状态,可以循环
的执行任务;
、任务接口():每个任务必须实现的接口,以供工作线程调度任务的执行,它
主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
、任务队列():用于存放没有处理的任务。提供一种缓冲机制。
一般一个任务就是 对象,把 放到一个队列中,就是任务队列,
线程通过任务接口去任务队列中去取任务进行执行(其实就是执行 对象中的
方法)
底层 通俗
适用
返 回 ThreadPoolExecutor 实
例 , 为 ;
! 为
"#$%&'()&*+, ; -&. 为
/* ; 为 +$,012 ;
为 34 同 步
队列5
(线程数可无限扩大,执行完任务超过
-&. ,服务就停止)
当有新任务到来,则插入到
SynchronousQueue 中,由
于 3 是 同 步
队列,因此会在池中寻找可用
线程来执行,若有可以线程则
执行,若没有可用线程则创建
一个线程来执行该任务;若池
中线程空闲时间超过指定大
小,则该线程会被销毁。
执行很多短期异步的小程序或
者负载较轻的服务器
6!
返 回 ThreadPoolExecutor 实 例 , 接
收 参 数 为 所 设 定 线 程 数 量
, 为
, ! 为
;-&. 为 *4不限时5;
为 : +$%"**",012 ;
为 :
*7#8945无 解
阻塞队列
创建可容纳固定数量线程的池
子,每隔线程的存活时间是无
限的,当池子满了就不在添加
线程了;如果池中的所有线程
均在繁忙状态,对于新任务会
进入阻塞队列中(无界的阻塞
队列5
执行长期的任务,性能好很多
评论0
最新资源