ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/LinkedBlockingDeque.java
(Generate patch)

Comparing jsr166/src/main/java/util/concurrent/LinkedBlockingDeque.java (file contents):
Revision 1.63 by jsr166, Thu Nov 17 04:13:42 2016 UTC vs.
Revision 1.64 by jsr166, Fri Nov 18 22:26:27 2016 UTC

# Line 1098 | Line 1098 | public class LinkedBlockingDeque<E>
1098      }
1099  
1100      /** A customized variant of Spliterators.IteratorSpliterator */
1101 <    static final class LBDSpliterator<E> implements Spliterator<E> {
1101 >    private final class LBDSpliterator implements Spliterator<E> {
1102          static final int MAX_BATCH = 1 << 25;  // max batch array size;
1103        final LinkedBlockingDeque<E> queue;
1103          Node<E> current;    // current node; null until initialized
1104          int batch;          // batch size for splits
1105          boolean exhausted;  // true when no more nodes
1106          long est;           // size estimate
1107 <        LBDSpliterator(LinkedBlockingDeque<E> queue) {
1108 <            this.queue = queue;
1110 <            this.est = queue.size();
1111 <        }
1107 >
1108 >        LBDSpliterator() { est = size(); }
1109  
1110          public long estimateSize() { return est; }
1111  
1112          public Spliterator<E> trySplit() {
1113              Node<E> h;
1117            final LinkedBlockingDeque<E> q = this.queue;
1114              int b = batch;
1115              int n = (b <= 0) ? 1 : (b >= MAX_BATCH) ? MAX_BATCH : b + 1;
1116              if (!exhausted &&
1117                  (((h = current) != null && h != h.next)
1118 <                 || (h = q.first) != null)
1118 >                 || (h = first) != null)
1119                  && h.next != null) {
1120                  Object[] a = new Object[n];
1121 <                final ReentrantLock lock = q.lock;
1121 >                final ReentrantLock lock = LinkedBlockingDeque.this.lock;
1122                  int i = 0;
1123                  Node<E> p = current;
1124                  lock.lock();
1125                  try {
1126 <                    if (((p != null && p != p.next) || (p = q.first) != null)
1126 >                    if (((p != null && p != p.next) || (p = first) != null)
1127                          && p.item != null)
1128                          for (; p != null && i < n; p = p.next)
1129                              a[i++] = p.item;
# Line 1156 | Line 1152 | public class LinkedBlockingDeque<E>
1152              if (exhausted)
1153                  return;
1154              exhausted = true;
1155 <            final LinkedBlockingDeque<E> q = this.queue;
1160 <            final ReentrantLock lock = q.lock;
1155 >            final ReentrantLock lock = LinkedBlockingDeque.this.lock;
1156              Node<E> p = current;
1157              current = null;
1158              do {
1159                  E e = null;
1160                  lock.lock();
1161                  try {
1162 <                    if ((p != null && p != p.next) || (p = q.first) != null) {
1162 >                    if ((p != null && p != p.next) || (p = first) != null) {
1163                          e = p.item;
1164                          p = p.next;
1165                      }
# Line 1180 | Line 1175 | public class LinkedBlockingDeque<E>
1175              if (action == null) throw new NullPointerException();
1176              if (exhausted)
1177                  return false;
1178 <            final LinkedBlockingDeque<E> q = this.queue;
1184 <            final ReentrantLock lock = q.lock;
1178 >            final ReentrantLock lock = LinkedBlockingDeque.this.lock;
1179              Node<E> p = current;
1180              E e = null;
1181              lock.lock();
1182              try {
1183 <                if ((p != null && p != p.next) || (p = q.first) != null) {
1183 >                if ((p != null && p != p.next) || (p = first) != null) {
1184                      e = p.item;
1185                      p = p.next;
1186                  }
# Line 1224 | Line 1218 | public class LinkedBlockingDeque<E>
1218       * @since 1.8
1219       */
1220      public Spliterator<E> spliterator() {
1221 <        return new LBDSpliterator<E>(this);
1221 >        return new LBDSpliterator();
1222      }
1223  
1224      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines