阻塞队列
笔记地址
点击进入
队列:先进先出
限定在一端进行插入,一端进行删除
出队为队头,入队为队尾
阻塞队列 BlockingQueue
Queue接口继承Collection接口
添加元素:add(),队列满了对抛出异常
offer(),队列满了不会抛出异常,返回false,不会抛异常
删除元素:remove(),有元素则返回移除的元素,为空的话则抛出异常
poll(),有元素则返回移除的元素,为空的话则返回null
获取队首元素:
element():抛异常
peek():不抛异常
BlockQueue:
多了两个方法:会进行阻塞
put()
take()
线程池
1:如何设置线程池的核心线程数和最大线程数4
我们对线程池负责执行的任务分为三种情况:
CPU密集型任务:比如找出1-1000000的素数:理论是CPU核数+1
IO密集型任务:比如文件io 网络io
混合任务
我们可以按以下公式进行【理论】:
线程数 = CPU核心数*(1+线程等待时间/线程运行总时间)
现实工作中经常用压测的方法来估算
工具:Jmeate、PostApi
2:线程池下
线程池的五种状态
running
shutdown:会把队列中的任务处理完
stop:不会处理队列中的任务
tidying:所有的线程停掉之后就会变成这个状态
terminated: