why Observable snapshot observer vector
<p>In Observable's notifyObservers method, why does the coder use  <code>arrLocal = obs.toArray();</code>?
Why does not coder iterate vector directly? Thanks </p>

<pre><code>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&gt;=0; i--)
        ((Observer)arrLocal[i]).update(this, arg);
}
</code></pre>
