全部评论
当提交一个新任务到线程池时
首先线程池判断基本线程池(corePoolSize)是否已满?没满,创建一个工作线程来执行任务。满了,则进入下个流程;
其次线程池判断工作队列(workQueue)是否已满?没满,则将新提交的任务存储在工作队列里。满了,则进入下个流程;
最后线程池判断整个线程池(maximumPoolSize)是否已满?没满,则创建一个新的工作线程来执行任务,满了,则交给拒绝策略来处理这个任务;
如果线程池中的线程数量大于 corePoolSize 时,如果某线程空闲时间超过
keepAliveTime,线程将被终止,直至线程池中的线程数目不大于
corePoolSize;如果允许为核心池中的线程设置存活时间,那么核心池中的线程空闲时间超过
keepAliveTime,线程也会被终止。
送花
回复
分享
newFixedThreadPool
是创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,对于超出的线程会在
LinkedBlockingQueue
队列中等待。
他的底层是
LinkedBlockingQueue
,
LinkedBlockingQueue
是排队三种策略中的***队列,一个基于链表结构的阻塞队列,此队列按先进先出排序元素。当同执行的任务数量超过传入的线程池大小值后,将会放入
LinkedBlockingQueue
,在
LinkedBlockingQueue
中的任务需要等待线程空闲后再执行,如果放入
LinkedBlockingQueue
中的任务超过整型的最大数时,抛出异常。
送花
回复
分享
滴滴
官网直投
大家可以讨论下
送花
回复
分享
用固定长度的队列控制啊。
送花
回复
分享
还有任务队列 任务队列的长度是整形的最大值 一般不会超过的
送花
回复
分享
放入等待队列,当线程池中有线程空闲就执行等待队列中的任务
送花
回复
分享
corePool大小是固定的,达到最大值后,任务会进入***队列中(LinkedBlockingQueue),***队列的最大值是整数的最大值,当线程池中有任务完成的,再从队列中取,否则,其他任务一直阻塞。
送花
回复
分享
进入等待队列等待空闲线程
送花
回复
分享
使用***队列
送花
回复
分享
答主不是大三吗,这么早找实习吗。。
送花
回复
分享
相关推荐
点赞 评论 收藏
转发
03-22 11:57
哈尔滨工业大学 计算机类 点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 评论 收藏
转发