code: final void runWorker(WorkQueue w) {
          w.growArray();                                  // allocate queue
          int bound = (w.config & SPARE_WORKER) != 0 ? 0 : POLL_LIMIT;
          long seed = w.hint * 0xdaba0b6eb09322e3L;       // initial random seed
          if ((runState & STOP) == 0) {
              for (long r = (seed == 0L) ? 1L : seed;;) { // ensure nonzero
                  if (bound == 0 && tryDropSpare(w))
                      break;
                  // high bits of prev seed for step; current low bits for idx
                  int step = (int)(r >>> 48) | 1;
                  r ^= r >>> 12; r ^= r << 25; r ^= r >>> 27; // xorshift
                  if (scan(w, bound, step, (int)r) < 0 && awaitWork(w) < 0)
                      break;
              }
          }
      }
docs: Top-level runloop for workers, called by ForkJoinWorkerThread.run.