【发布时间】:2016-04-04 09:47:36
【问题描述】:
在 Java 8 中,java.lang.Thread 类有 3 个新字段:
/** The current seed for a ThreadLocalRandom */
@sun.misc.Contended("tlr")
long threadLocalRandomSeed;
/** Probe hash value; nonzero if threadLocalRandomSeed initialized */
@sun.misc.Contended("tlr")
int threadLocalRandomProbe;
/** Secondary seed isolated from public ThreadLocalRandom sequence */
@sun.misc.Contended("tlr")
int threadLocalRandomSecondarySeed;
正如 Javadoc 中所说,由类 java.util.concurrent.ThreadLocalRandom 专门管理。
此外,在ThreadLocalRandom 中,它们的使用方式非常怪异:
SEED = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomSeed"));
PROBE = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomProbe"));
SECONDARY = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomSecondarySeed"));
(同样的代码段也可以在LockSupport类中遇到)。
然后这个偏移量在几个java.concurrent 的地方内部使用。
什么想法?为什么这些字段位于java.lang.Thread 内?为什么不在ThreadLocalRandom 里面?
【问题讨论】:
-
不知道这个 - 我会/实际上已经回答了你之前关于
"tlr"的问题。 -
@luk2302 很好的答案,非常感谢你,但有人反对我的问题,所以我必须删除它。我真的很抱歉。
-
不赞成票不是删除问题或答案的理由,例如,我给了你一个赞成票,将其设为 0 分。
标签: java java-8 thread-local