730 |
|
} |
731 |
|
|
732 |
|
// Unsafe mechanics |
733 |
– |
private static long fieldOffset(String fieldName, Class<?> klazz) { |
734 |
– |
try { |
735 |
– |
return UNSAFE.objectFieldOffset(klazz.getDeclaredField(fieldName)); |
736 |
– |
} catch (NoSuchFieldException e) { |
737 |
– |
// Convert Exception to Error |
738 |
– |
NoSuchFieldError error = new NoSuchFieldError(fieldName); |
739 |
– |
error.initCause(e); |
740 |
– |
throw error; |
741 |
– |
} |
742 |
– |
} |
733 |
|
|
734 |
|
private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe(); |
735 |
|
private static final long spOffset = |
736 |
< |
fieldOffset("sp", ForkJoinWorkerThread.class); |
736 |
> |
objectFieldOffset("sp", ForkJoinWorkerThread.class); |
737 |
|
private static final long runStateOffset = |
738 |
< |
fieldOffset("runState", ForkJoinWorkerThread.class); |
738 |
> |
objectFieldOffset("runState", ForkJoinWorkerThread.class); |
739 |
|
private static final long qBase; |
740 |
|
private static final int qShift; |
741 |
|
|
746 |
|
throw new Error("data type scale not a power of two"); |
747 |
|
qShift = 31 - Integer.numberOfLeadingZeros(s); |
748 |
|
} |
749 |
+ |
|
750 |
+ |
private static long objectFieldOffset(String field, Class<?> klazz) { |
751 |
+ |
try { |
752 |
+ |
return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field)); |
753 |
+ |
} catch (NoSuchFieldException e) { |
754 |
+ |
// Convert Exception to corresponding Error |
755 |
+ |
NoSuchFieldError error = new NoSuchFieldError(field); |
756 |
+ |
error.initCause(e); |
757 |
+ |
throw error; |
758 |
+ |
} |
759 |
+ |
} |
760 |
|
} |