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;