156 |
|
} |
157 |
|
|
158 |
|
// Set up to allow setting thread fields in constructor |
159 |
< |
private static final sun.misc.Unsafe U; |
159 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
160 |
|
private static final long THREADLOCALS; |
161 |
|
private static final long INHERITABLETHREADLOCALS; |
162 |
|
private static final long INHERITEDACCESSCONTROLCONTEXT; |
163 |
|
static { |
164 |
|
try { |
165 |
– |
U = sun.misc.Unsafe.getUnsafe(); |
166 |
– |
Class<?> tk = Thread.class; |
165 |
|
THREADLOCALS = U.objectFieldOffset |
166 |
< |
(tk.getDeclaredField("threadLocals")); |
166 |
> |
(Thread.class.getDeclaredField("threadLocals")); |
167 |
|
INHERITABLETHREADLOCALS = U.objectFieldOffset |
168 |
< |
(tk.getDeclaredField("inheritableThreadLocals")); |
168 |
> |
(Thread.class.getDeclaredField("inheritableThreadLocals")); |
169 |
|
INHERITEDACCESSCONTROLCONTEXT = U.objectFieldOffset |
170 |
< |
(tk.getDeclaredField("inheritedAccessControlContext")); |
170 |
> |
(Thread.class.getDeclaredField("inheritedAccessControlContext")); |
171 |
|
} catch (ReflectiveOperationException e) { |
172 |
|
throw new Error(e); |
173 |
|
} |
220 |
|
private static ThreadGroup createThreadGroup() { |
221 |
|
try { |
222 |
|
sun.misc.Unsafe u = sun.misc.Unsafe.getUnsafe(); |
223 |
< |
Class<?> tk = Thread.class; |
224 |
< |
Class<?> gk = ThreadGroup.class; |
225 |
< |
long tg = u.objectFieldOffset(tk.getDeclaredField("group")); |
226 |
< |
long gp = u.objectFieldOffset(gk.getDeclaredField("parent")); |
223 |
> |
long tg = u.objectFieldOffset |
224 |
> |
(Thread.class.getDeclaredField("group")); |
225 |
> |
long gp = u.objectFieldOffset |
226 |
> |
(ThreadGroup.class.getDeclaredField("parent")); |
227 |
|
ThreadGroup group = (ThreadGroup) |
228 |
|
u.getObject(Thread.currentThread(), tg); |
229 |
|
while (group != null) { |