>>68
2についてはsynchronizedで待っているスレッドは原則として中断できない。
(Thread#stopで停止はできるが、これは危険!)
ただし、synchronizedとwait,notifyを使って中断可能な
mutexやセマフォを作ることは可能。
(当然synchronizedを使うが、どのような状況でもsynchronizedで長期間ブロックしないように実装すればよい)
...というのが正解。

1についてはsynchronizedメソッドをfinal指定するか、
もともとsynchronizedしなくてもいいように読み出し専用
オブジェクトにしてしまうというのも手だな。
java.util.Collectionsなんかがやってることも参考になるので見てみれ。

Javaスレッドの正しい使い方、問題点は以下のリンクを参照。
外人の言う事はためになるので読め。
http://www-6.ibm.com/jp/developerworks/java/010427/j_j-thread.html
http://www-6.ibm.com/jp/developerworks/java/010302/j_j-king.html

64はパッケージのソース見れって言うけど、
移植性の高いプログラム書こうという人は
そんなことしちゃいけないんだぞー