remove办法:
- public boolean remove(Object o) {
- if (o == null) return false;
- final Object[] items = this.items;
- final ReentrantLock lock = this.lock;
- lock.lock(); // 加锁,包管调用remove办法的时刻只有1个线程
- try {
- for (int i = takeIndex, k = count; k > 0; i = inc(i), k--) { // 遍历元素
- if (o.equals(items[i])) { // 两个对象相等的话
- removeAt(i); // 调用removeAt办法
- return true; // 删除成功,返回true
- }
- }
- return false; // 删除成功,返回false
- } finally {
- lock.unlock(); // 释放锁,让其他线程可声调用remove办法
- }
- }
- void removeAt(int i) {
- final Object[] items = this.items;
- if (i == takeIndex) { // 如不雅要删除数据的索引是取索引地位,直接删除取索引地位上的数据,然后取索引+1即可
- items[takeIndex] = null;
- takeIndex = inc(takeIndex);
- } else { // 如不雅要删除数据的索引不是取索引地位,移动元素元素,更新取索引和放索引的值
- for (;;) {
- int nexti = inc(i);
推荐阅读
核心提示: 大年夜量来自于发念头和其他一些关键部件的监控数据,使得猜测性维修具备了可行性。越来越多的数据的收集和分析对象正在被开辟或者投入应用。大年夜量来自于发念头和其他一些关>>>详细阅读
本文标题:Java阻塞队列实现原理分析
地址:http://www.17bianji.com/lsqh/34749.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示