jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListSet.java
changeset 8544 225896f7b33c
parent 7518 0282db800fe1
child 9242 ef138d47df58
equal deleted inserted replaced
8543:e5ec12a932da 8544:225896f7b33c
   468     public NavigableSet<E> descendingSet() {
   468     public NavigableSet<E> descendingSet() {
   469         return new ConcurrentSkipListSet(m.descendingMap());
   469         return new ConcurrentSkipListSet(m.descendingMap());
   470     }
   470     }
   471 
   471 
   472     // Support for resetting map in clone
   472     // Support for resetting map in clone
   473     private static final Unsafe unsafe = Unsafe.getUnsafe();
   473     private void setMap(ConcurrentNavigableMap<E,Object> map) {
       
   474         UNSAFE.putObjectVolatile(this, mapOffset, map);
       
   475     }
       
   476 
       
   477     private static final sun.misc.Unsafe UNSAFE;
   474     private static final long mapOffset;
   478     private static final long mapOffset;
   475     static {
   479     static {
   476         try {
   480         try {
   477             mapOffset = unsafe.objectFieldOffset
   481             UNSAFE = sun.misc.Unsafe.getUnsafe();
   478                 (ConcurrentSkipListSet.class.getDeclaredField("m"));
   482             Class k = ConcurrentSkipListSet.class;
   479         } catch (Exception ex) { throw new Error(ex); }
   483             mapOffset = UNSAFE.objectFieldOffset
   480     }
   484                 (k.getDeclaredField("m"));
   481     private void setMap(ConcurrentNavigableMap<E,Object> map) {
   485         } catch (Exception e) {
   482         unsafe.putObjectVolatile(this, mapOffset, map);
   486             throw new Error(e);
   483     }
   487         }
   484 
   488     }
   485 }
   489 }