8294278: ForkJoinPool.getAndAddPoolIds should use Unsafe.staticFieldBase

Reviewed-by: burban, chegar, martin
This commit is contained in:
Alan Bateman 2022-12-01 10:40:36 +00:00
parent eea1a8a95e
commit cd776093c7
2 changed files with 17 additions and 5 deletions

View file

@ -25,6 +25,7 @@
package java.lang;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.AccessControlContext;
import java.security.Permission;
@ -1107,14 +1108,21 @@ public class Thread implements Runnable {
*/
private static class ThreadNumbering {
private static final Unsafe U;
private static final long NEXT;
private static final Object NEXT_BASE;
private static final long NEXT_OFFSET;
static {
U = Unsafe.getUnsafe();
NEXT = U.objectFieldOffset(ThreadNumbering.class, "next");
try {
Field nextField = ThreadNumbering.class.getDeclaredField("next");
NEXT_BASE = U.staticFieldBase(nextField);
NEXT_OFFSET = U.staticFieldOffset(nextField);
} catch (NoSuchFieldException e) {
throw new ExceptionInInitializerError(e);
}
}
private static volatile int next;
static int next() {
return U.getAndAddInt(ThreadNumbering.class, NEXT, 1);
return U.getAndAddInt(NEXT_BASE, NEXT_OFFSET, 1);
}
}