why Observable snapshot observer vector

Posted by han14466 on Stack Overflow See other posts from Stack Overflow or by han14466
Published on 2010-12-15T04:33:53Z Indexed on 2012/06/20 15:16 UTC
Read the original article Hit count: 199

Filed under:

In Observable's notifyObservers method, why does the coder use arrLocal = obs.toArray();? Why does not coder iterate vector directly? Thanks

public void notifyObservers(Object arg) {

    Object[] arrLocal;

    synchronized (this) {
        /* We don't want the Observer doing callbacks into
        * arbitrary code while holding its own Monitor.
        * The code where we extract each Observable from 
        * the Vector and store the state of the Observer
        * needs synchronization, but notifying observers
        * does not (should not).  The worst result of any 
        * potential race-condition here is that:
        * 1) a newly-added Observer will miss a
        *   notification in progress
        * 2) a recently unregistered Observer will be
        *   wrongly notified when it doesn't care
        */
        if (!changed)
            return;
        arrLocal = obs.toArray();
        clearChanged();
    }

    for (int i = arrLocal.length-1; i>=0; i--)
        ((Observer)arrLocal[i]).update(this, arg);
}

© Stack Overflow or respective owner

Related posts about java