private void externalSubmit(ForkJoinTask<?> task) {
        int r;                                    // initialize caller's probe
        if ((r = ThreadLocalRandomHelper.getProbe()) == 0) {
            ThreadLocalRandomHelper.localInit();
            r = ThreadLocalRandomHelper.getProbe();
        }
        for (;;) {
            WorkQueue[] ws; WorkQueue q; int rs, m, k;
            boolean move = false;
            if ((rs = runState) < 0) {
                tryTerminate(false, false);     // help terminate
                throw new RejectedExecutionException();
            }
            else if ((rs & STARTED) == 0 ||     // initialize
                     ((ws = workQueues) == null || (m = ws.length - 1) < 0)) {
                int ns = 0;
                rs = lockRunState();
                try {
                    if ((rs & STARTED) == 0) {
                        U.compareAndSwapObject(this, STEALCOUNTER, null,
                                               new AtomicLong());
                        // create workQueues array with size a power of two
                        int p = config & SMASK; // ensure at least 2 slots
                        int n = (p > 1) ? p - 1 : 1;
                        n |= n >>> 1; n |= n >>> 2;  n |= n >>> 4;
                        n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
                        workQueues = new WorkQueue[n];
                        ns = STARTED;
                    }
                } finally {
                    unlockRunState(rs, (rs & ~RSLOCK) | ns);
                }
            }
            else if ((q = ws[k = r & m & SQMASK]) != null) {
                if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) {
                    ForkJoinTask<?>[] a = q.array;
                    int s = q.top;
                    boolean submitted = false; // initial submission or resizing
                    try {                      // locked version of push
                        if ((a != null && a.length > s + 1 - q.base) ||
                            (a = q.growArray()) != null) {
                            int j = (((a.length - 1) & s) << ASHIFT) + ABASE;
                            U.putOrderedObject(a, j, task);
                            U.putOrderedInt(q, QTOP, s + 1);
                            submitted = true;
                        }
                    } finally {
                        U.compareAndSwapInt(q, QLOCK, 1, 0);
                    }
                    if (submitted) {
                        signalWork(ws, q);
                        return;
                    }
                }
                move = true;                   // move on failure
            }
            else if (((rs = runState) & RSLOCK) == 0) { // create new queue
                q = new WorkQueue(this, null);
                q.hint = r;
                q.config = k | SHARED_QUEUE;
                q.scanState = INACTIVE;
                rs = lockRunState();           // publish index
                if (rs > 0 &&  (ws = workQueues) != null &&
                    k < ws.length && ws[k] == null)
                    ws[k] = q;                 // else terminated
                unlockRunState(rs, rs & ~RSLOCK);
            }
            else
                move = true;                   // move if busy
            if (move)
                r = ThreadLocalRandomHelper.advanceProbe(r);
        }
    }
private void externalSubmit(ForkJoinTask<?> task) {
        int r;                                    
        if ((r = ThreadLocalRandomHelper.getProbe()) == 0) {
            ThreadLocalRandomHelper.localInit();
            r = ThreadLocalRandomHelper.getProbe();
        }
        for (;;) {
            WorkQueue[] ws; WorkQueue q; int rs, m, k;
            boolean move = false;
            if ((rs = runState) < 0) {
                tryTerminate(false, false);     
                throw new RejectedExecutionException();
            }
            else if ((rs & STARTED) == 0 ||     
                     ((ws = workQueues) == null || (m = ws.length - 1) < 0)) {
                int ns = 0;
                rs = lockRunState();
                try {
                    if ((rs & STARTED) == 0) {
                        U.compareAndSwapObject(this, STEALCOUNTER, null,
                                               new AtomicLong());
                        
                        int p = config & SMASK; 
                        int n = (p > 1) ? p - 1 : 1;
                        n |= n >>> 1; n |= n >>> 2;  n |= n >>> 4;
                        n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
                        workQueues = new WorkQueue[n];
                        ns = STARTED;
                    }
                } finally {
                    unlockRunState(rs, (rs & ~RSLOCK) | ns);
                }
            }
            else if ((q = ws[k = r & m & SQMASK]) != null) {
                if (q.qlock == 0 && U.compareAndSwapInt(q, QLOCK, 0, 1)) {
                    ForkJoinTask<?>[] a = q.array;
                    int s = q.top;
                    boolean submitted = false; 
                    try {                      
                        if ((a != null && a.length > s + 1 - q.base) ||
                            (a = q.growArray()) != null) {
                            int j = (((a.length - 1) & s) << ASHIFT) + ABASE;
                            U.putOrderedObject(a, j, task);
                            U.putOrderedInt(q, QTOP, s + 1);
                            submitted = true;
                        }
                    } finally {
                        U.compareAndSwapInt(q, QLOCK, 1, 0);
                    }
                    if (submitted) {
                        signalWork(ws, q);
                        return;
                    }
                }
                move = true;                   
            }
            else if (((rs = runState) & RSLOCK) == 0) { 
                q = new WorkQueue(this, null);
                q.hint = r;
                q.config = k | SHARED_QUEUE;
                q.scanState = INACTIVE;
                rs = lockRunState();           
                if (rs > 0 &&  (ws = workQueues) != null &&
                    k < ws.length && ws[k] == null)
                    ws[k] = q;                 
                unlockRunState(rs, rs & ~RSLOCK);
            }
            else
                move = true;                   
            if (move)
                r = ThreadLocalRandomHelper.advanceProbe(r);
        }
    }
private void externalSubmit ( ForkJoinTask < ? > task ) { int r ; // initialize caller's probe if ( ( r = ThreadLocalRandomHelper . getProbe ( ) ) == 0 ) { ThreadLocalRandomHelper . localInit ( ) ; r = ThreadLocalRandomHelper . getProbe ( ) ; } for ( ; ; ) { WorkQueue [ ] ws ; WorkQueue q ; int rs , m , k ; boolean move = false ; if ( ( rs = runState ) < 0 ) { tryTerminate ( false , false ) ; // help terminate throw new RejectedExecutionException ( ) ; } else if ( ( rs & STARTED ) == 0 || // initialize ( ( ws = workQueues ) == null || ( m = ws . length - 1 ) < 0 ) ) { int ns = 0 ; rs = lockRunState ( ) ; try { if ( ( rs & STARTED ) == 0 ) { U . compareAndSwapObject ( this , STEALCOUNTER , null , new AtomicLong ( ) ) ; // create workQueues array with size a power of two int p = config & SMASK ; // ensure at least 2 slots int n = ( p > 1 ) ? p - 1 : 1 ; n |= n >>> 1 ; n |= n >>> 2 ; n |= n >>> 4 ; n |= n >>> 8 ; n |= n >>> 16 ; n = ( n + 1 ) << 1 ; workQueues = new WorkQueue [ n ] ; ns = STARTED ; } } finally { unlockRunState ( rs , ( rs & ~ RSLOCK ) | ns ) ; } } else if ( ( q = ws [ k = r & m & SQMASK ] ) != null ) { if ( q . qlock == 0 && U . compareAndSwapInt ( q , QLOCK , 0 , 1 ) ) { ForkJoinTask < ? > [ ] a = q . array ; int s = q . top ; boolean submitted = false ; // initial submission or resizing try { // locked version of push if ( ( a != null && a . length > s + 1 - q . base ) || ( a = q . growArray ( ) ) != null ) { int j = ( ( ( a . length - 1 ) & s ) << ASHIFT ) + ABASE ; U . putOrderedObject ( a , j , task ) ; U . putOrderedInt ( q , QTOP , s + 1 ) ; submitted = true ; } } finally { U . compareAndSwapInt ( q , QLOCK , 1 , 0 ) ; } if ( submitted ) { signalWork ( ws , q ) ; return ; } } move = true ; // move on failure } else if ( ( ( rs = runState ) & RSLOCK ) == 0 ) { // create new queue q = new WorkQueue ( this , null ) ; q . hint = r ; q . config = k | SHARED_QUEUE ; q . scanState = INACTIVE ; rs = lockRunState ( ) ; // publish index if ( rs > 0 && ( ws = workQueues ) != null && k < ws . length && ws [ k ] == null ) ws [ k ] = q ; // else terminated unlockRunState ( rs , rs & ~ RSLOCK ) ; } else move = true ; // move if busy if ( move ) r = ThreadLocalRandomHelper . advanceProbe ( r ) ; } }
Full version of externalPush, handling uncommon cases, as well
as performing secondary initialization upon the first
submission of the first task to the pool.  It also detects
first submission by an external thread and creates a new shared
queue if the one at index if empty or contended.

@param task the task. Caller must ensure non-null.
Full version of externalPush handling uncommon cases as well as performing secondary initialization upon the first submission of the first task to the pool . It also detects first submission by an external thread and creates a new shared queue if the one at index if empty or contended .