jdk/src/java.base/share/classes/java/util/concurrent/atomic/LongAccumulator.java
changeset 41131 87edc8451f8a
parent 39725 9548f8d846e9
child 45935 75c0f4d0ebea
equal deleted inserted replaced
41130:2004bf22423f 41131:87edc8451f8a
   101      *
   101      *
   102      * @param x the value
   102      * @param x the value
   103      */
   103      */
   104     public void accumulate(long x) {
   104     public void accumulate(long x) {
   105         Cell[] as; long b, v, r; int m; Cell a;
   105         Cell[] as; long b, v, r; int m; Cell a;
   106         if ((as = cells) != null ||
   106         if ((as = cells) != null
   107             (r = function.applyAsLong(b = base, x)) != b && !casBase(b, r)) {
   107             || ((r = function.applyAsLong(b = base, x)) != b
       
   108                 && !casBase(b, r))) {
   108             boolean uncontended = true;
   109             boolean uncontended = true;
   109             if (as == null || (m = as.length - 1) < 0 ||
   110             if (as == null
   110                 (a = as[getProbe() & m]) == null ||
   111                 || (m = as.length - 1) < 0
   111                 !(uncontended =
   112                 || (a = as[getProbe() & m]) == null
   112                   (r = function.applyAsLong(v = a.value, x)) == v ||
   113                 || !(uncontended =
   113                   a.cas(v, r)))
   114                      (r = function.applyAsLong(v = a.value, x)) == v
       
   115                      || a.cas(v, r)))
   114                 longAccumulate(x, function, uncontended);
   116                 longAccumulate(x, function, uncontended);
   115         }
   117         }
   116     }
   118     }
   117 
   119 
   118     /**
   120     /**