并发-线程池

阻塞队列

笔记地址
点击进入

队列:先进先出
限定在一端进行插入,一端进行删除
出队为队头,入队为队尾

阻塞队列 BlockingQueue

并发-线程池_第1张图片

Queue接口继承Collection接口
		添加元素:add(),队列满了对抛出异常
							offer(),队列满了不会抛出异常,返回false,不会抛异常
		删除元素:remove(),有元素则返回移除的元素,为空的话则抛出异常
							poll(),有元素则返回移除的元素,为空的话则返回null
		获取队首元素:
						element():抛异常
						peek():不抛异常

BlockQueue:
多了两个方法:会进行阻塞
put()
take()

并发-线程池_第2张图片

并发-线程池_第3张图片
并发-线程池_第4张图片

线程池

1:如何设置线程池的核心线程数和最大线程数4
我们对线程池负责执行的任务分为三种情况:
CPU密集型任务:比如找出1-1000000的素数:理论是CPU核数+1
IO密集型任务:比如文件io 网络io
混合任务
我们可以按以下公式进行【理论】:
线程数 = CPU核心数*(1+线程等待时间/线程运行总时间)
现实工作中经常用压测的方法来估算
工具:Jmeate、PostApi
2:线程池下
并发-线程池_第5张图片
线程池的五种状态

并发-线程池_第6张图片

并发-线程池_第7张图片

running
shutdown:会把队列中的任务处理完
stop:不会处理队列中的任务
tidying:所有的线程停掉之后就会变成这个状态
terminated:

并发-线程池_第8张图片

你可能感兴趣的:(并发,java)