#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列

1.什么是ConcurrentLinkedQueue 队列?

首先看一看的关系图:


#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列_第1张图片

它是一个使用CAS 算法实现的非阻塞线程安全的FIFO队列,来保证元素的一致性。因为是使用NODE 节点实现的队列,所在在获取长度的时候,会遍历一遍此队列,会比较耗时

我们在使用判断元素是否为空的时候,最好不要用size() 来做判断,可以用isEmpty()方法来判断。ps:因为此类实现了Collection 接口,所以会有size() 和isEmpty() 方法。

2.最后体验一下队列中使用size()的后果。我往队列里面放入10000000 我使用ArrayList 的size() 做比较。测试有时候会相差1秒多,随着数据的增大会更加明显,

size 队列遍历的代码如下:所以在多线程并发的情况下,最后不用size() 。


#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列_第2张图片

我写了一个例子来比较队列和数组使用size() 的区别,请看下面的代码:

实体bean:


#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列_第3张图片

主线程方法:


#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列_第4张图片


#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列_第5张图片

测试结果如下:

你可能感兴趣的:(#30天专注成长计划#java-并发 ConcurrentLinkedQueue 队列)