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