ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166y/Phaser.java
(Generate patch)

Comparing jsr166/src/jsr166y/Phaser.java (file contents):
Revision 1.78 by jsr166, Sun Nov 18 18:03:10 2012 UTC vs.
Revision 1.81 by jsr166, Fri Jul 15 18:49:12 2016 UTC

# Line 44 | Line 44 | import java.util.concurrent.locks.LockSu
44   *
45   * <ul>
46   *
47 < *   <li> <b>Arrival.</b> Methods {@link #arrive} and
47 > *   <li><b>Arrival.</b> Methods {@link #arrive} and
48   *       {@link #arriveAndDeregister} record arrival.  These methods
49   *       do not block, but return an associated <em>arrival phase
50   *       number</em>; that is, the phase number of the phaser to which
# Line 57 | Line 57 | import java.util.concurrent.locks.LockSu
57   *       flexible than, providing a barrier action to a {@code
58   *       CyclicBarrier}.
59   *
60 < *   <li> <b>Waiting.</b> Method {@link #awaitAdvance} requires an
60 > *   <li><b>Waiting.</b> Method {@link #awaitAdvance} requires an
61   *       argument indicating an arrival phase number, and returns when
62   *       the phaser advances to (or is already at) a different phase.
63   *       Unlike similar constructions using {@code CyclicBarrier},
# Line 193 | Line 193 | import java.util.concurrent.locks.LockSu
193   *   phaser.arriveAndDeregister();
194   * }}</pre>
195   *
196 *
196   * <p>To create a set of {@code n} tasks using a tree of phasers, you
197   * could use code of the following form, assuming a Task class with a
198   * constructor accepting a {@code Phaser} that it registers with upon
# Line 1142 | Line 1141 | public class Phaser {
1141      private static sun.misc.Unsafe getUnsafe() {
1142          try {
1143              return sun.misc.Unsafe.getUnsafe();
1144 <        } catch (SecurityException se) {
1145 <            try {
1146 <                return java.security.AccessController.doPrivileged
1147 <                    (new java.security
1148 <                     .PrivilegedExceptionAction<sun.misc.Unsafe>() {
1149 <                        public sun.misc.Unsafe run() throws Exception {
1150 <                            java.lang.reflect.Field f = sun.misc
1151 <                                .Unsafe.class.getDeclaredField("theUnsafe");
1152 <                            f.setAccessible(true);
1153 <                            return (sun.misc.Unsafe) f.get(null);
1154 <                        }});
1155 <            } catch (java.security.PrivilegedActionException e) {
1156 <                throw new RuntimeException("Could not initialize intrinsics",
1157 <                                           e.getCause());
1158 <            }
1144 >        } catch (SecurityException tryReflectionInstead) {}
1145 >        try {
1146 >            return java.security.AccessController.doPrivileged
1147 >            (new java.security.PrivilegedExceptionAction<sun.misc.Unsafe>() {
1148 >                public sun.misc.Unsafe run() throws Exception {
1149 >                    Class<sun.misc.Unsafe> k = sun.misc.Unsafe.class;
1150 >                    for (java.lang.reflect.Field f : k.getDeclaredFields()) {
1151 >                        f.setAccessible(true);
1152 >                        Object x = f.get(null);
1153 >                        if (k.isInstance(x))
1154 >                            return k.cast(x);
1155 >                    }
1156 >                    throw new NoSuchFieldError("the Unsafe");
1157 >                }});
1158 >        } catch (java.security.PrivilegedActionException e) {
1159 >            throw new RuntimeException("Could not initialize intrinsics",
1160 >                                       e.getCause());
1161          }
1162      }
1163   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines