if (spins < 0) { // establish spins at/near front
if ((spins = spinsFor(pred, s.isData)) > 0)
randomYields = ThreadLocalRandom.current();
} else if (spins > 0) { // spin
--spins;
if (randomYields.nextInt(CHAINED_SPINS) == 0)
Strand.yield(); // occasionally yield
} else if (s.waiter == null) {
requestUnpark(s, w); // request unpark then recheck
} else if (timed) {
long now = System.nanoTime();