技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_编程

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_编程_02

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_线程池_03

注意这个ConcurrentLinkedQueue这个是个非阻塞队列,

这个队列是没有长度限制的,不用给一个长度,直接,向队列不停的.add数据就可以,

然后poll,是出队列,出队列的同时,并且会从队列中移出元素

然后peek,会返回队列内容,但是不会移出元素,在Vc++中,还做个peekmessage

可以移出,有个参数,写上就可以移出,在vc++中没有pool这个用法

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_线程池_04

可以看到我添加了3个,pool移出一个还要size是2,然后再peek,可以看到,长度并没有变,peek不会移出元素

并且队列是先进先出,也就是java先添加的,java先读出来,然后栈是先进后出,其实队列就是平时排队,栈就是只有一个出口,跟羽毛球筒一样,

先放入进去的球最后拿出来

 

然后再看看阻塞队列

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_Java编程_05

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_JAVA零碎要点_06

可以看到这个阻塞队列是个接口

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_编程_07

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_JAVA零碎要点_08

阻塞队列是有边界的,也就是需要给他个长度,这里给他个3个长度.

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_编程_09

这里可以看到,如果我队列长度是3,我放入了4个元素,就报错了

这个时候我们可以不用add,用offer来进行添加数据

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_Java编程_10

offer添加数据的时候是这样的,

可以看到,offer先添加3个数据,因为队列的长度就是3,

然后添加第4个时候,我这样添加,offer可以看到有2个参数,3是超时时间

TimeUnit.SECONDS就是单位意思就是,我oofer尝试去添加数据,

尝试3秒还是添加不进去,就不添加了

 

执行一下可以看到没添加进去

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_编程_11

如果我添加第4个时候,先出队一共,可以看到再去添加就添加进去了

JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列_线程池_12

可以看到就可以了.