W Javie 8, java.lang.Thread
klasa dostaje 3 nowe pola:Nowe dodatkowe pola w java.lang.Thread, jaki jest pomysł?
/** 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;
jak to powiedział w Javadoc dla zarządzana wyłącznie przez klasę java.util.concurrent.ThreadLocalRandom
.
Ponadto w ThreadLocalRandom
są one wykorzystywane w bardzo dziwaczny sposób:
SEED = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomSeed"));
PROBE = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomProbe"));
SECONDARY = UNSAFE.objectFieldOffset
(tk.getDeclaredField("threadLocalRandomSecondarySeed"));
(ten sam kawałek kodu może być spełnione również w LockSupport
klasie).
, a następnie te przesunięcia są używane wewnętrznie w kilku miejscach java.concurrent
.
Jaka jest idea? Dlaczego te pola są miejscami wewnątrz java.lang.Thread
? Dlaczego nie wewnątrz ThreadLocalRandom
?
Nie mam pojęcia o tym - miałbym/faktycznie miałem odpowiedź na twoje poprzednie pytanie dotyczące '" tlr "'. – luk2302
@ luk2302 Świetna odpowiedź, bardzo ci dziękuję, ale ktoś źle ocenił moje pytanie, więc muszę je usunąć. Naprawdę przepraszam za to. – Andremoniy
Downvotes nie są powodem do usuwania pytań lub odpowiedzi, na przykład dałem ci uprowadzenie, co daje wynik 0. – luk2302