首页 > 其他分享 >ArrayBlockingQueue解释

ArrayBlockingQueue解释

时间:2023-04-05 19:47:38浏览次数:52  
标签:解释 元素 队列 移除 添加 取取 ArrayBlockingQueue arrayBlockingQueue

 1  //transient是Java语言的关键字,用来表示一个成员变量不是该对象序列化的一部分。当一个对象被序列化的时候,transient型变量的值不包括在序列化的结果中。
 2         // 而非transient型的变量是被包括进去的。  注意static修饰的静态变量天然就是不可序列化的。
 3 
 4         //使用场景,适合消费和生产效率差不多的情况,生产速率远远大于消费速率,容易造成OOM,
 5         //利用指针和数组,形成环状结构,重复利用内存空间,
 6         //内部是一个数组,不可扩容
 7         ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(10);
 8 
 9 
10         //添加添加添加添加添加添加添加添加添加添加添加添加添加
11         /**
12          * 里面调用的也是offer,队列满了依旧添加会抛异常
13          */
14         arrayBlockingQueue.add();
15         /**
16          * 如果得列是满的,等待空间空出来再添加  TODO 思考会不会OOM
17          */
18         arrayBlockingQueue.put();
19         /**
20          * 队列是满的返回false,不然立马把元素添加到队列尾部,添加成功返回true 添加的元素不可为空
21          */
22         arrayBlockingQueue.offer();
23         /**
24          * 添加一个非空元素,超过设定时间不会加入队列返回false,添加成功返回true
25          */
26         arrayBlockingQueue.offer(1, 3, TimeUnit.SECONDS);
27         /**
28          * 把集合放入队列, 如果添加的集合元素大于队列容量,多余元素进行等待
29          */
30         arrayBlockingQueue.addAll();
31 
32         //取取取取取取取取取取取取取取取取取取取取取取
33         /**
34          *通过下表标查找返回的元,只会查找不会把元素移除
35          */
36         arrayBlockingQueue.peek();
37         /**
38          * 通过下表标查找返回的元,没有元素返回null,有元素就根据下标取相应位置上的元素,查找并移除
39          */
40         arrayBlockingQueue.poll();
41         /**
42          * 通过下表标查找返回的元素,超过指定时间返回null
43          */
44         arrayBlockingQueue.poll(10, TimeUnit.SECONDS);
45 
46         /**
47          * 每次获取一个,没有就阻塞,查找并移除
48          */
49         arrayBlockingQueue.take();
50 
51 
52 //        移除移除移除移除移除移除移除移除移除移除
53         /**
54          *循环把内部数组上的元素变成NULL进行删除【内部调用poll()】
55          */
56         arrayBlockingQueue.remove();
57         /**
58          * 移除队列内包含集合内的的元素
59          */
60         arrayBlockingQueue.removeAll();
61         //交集
62         arrayBlockingQueue.retainAll()
源码内部锁

 

    /** Main lock guarding all access */
    final ReentrantLock lock;

    /**取锁:为空的话等待*/
    private final Condition notEmpty;

    /** 存锁:满的话等待 */
    private final Condition notFull;

 

标签:解释,元素,队列,移除,添加,取取,ArrayBlockingQueue,arrayBlockingQueue
From: https://www.cnblogs.com/wangbiaohistory/p/17290670.html

相关文章