FutureTask&Sync innerRun

 

/**
         * The thread running task. When nulled after set/cancel, this
         * indicates that the results are accessible.  Must be
         * volatile, to ensure visibility upon completion.
         */
        private volatile Thread runner;

void innerRun() {
            if (!compareAndSetState(0, RUNNING))    //设置失败,直接返回;成功,继续
                return;
            try {
                runner = Thread.currentThread();
                if (getState() == RUNNING) // recheck after setting thread
                    innerSet(callable.call());
                else
                    releaseShared(0); // cancel
            } catch (Throwable ex) {
                innerSetException(ex);
            }
        }
 

 

 

 

你可能感兴趣的:(thread)