>>963
簡単な例をあげると、v が Vector だとして、

int i = myVector.size() - 1;

/* 他のスレッドが v.removeAllElements() を実行 */

System.out.println(myVector.elementAt(i)); // ArrayIndexOutOfBoundsException が起こる。

ここで Exception を避けたければ、この外側で synchronized(v) としなければならない。
ちなみに、こういう状況になったときに、確実に Exception が発生するのが広義のスレッドセーフ。
ArrayList では Exception が発生するかすら保証されない。