これは、Java の一般的な並行性の問題に関する一種のアンケートです。例としては、典型的なデッドロックや競合状態、あるいは Swing の EDT スレッド バグなどが挙げられます。私は、起こり得るさまざまな問題だけでなく、最も一般的な問題にも興味があります。したがって、コメントごとに Java 並行性バグの具体的な回答を 1 つ残し、遭遇した問題を見つけた場合は投票してください。
ベストアンサー1
私の最も痛いもの1位同時実行の問題が発生したのは2つの異なるオープンソースライブラリは次のようなことを行いました:
private static final String LOCK = "LOCK"; // use matching strings
// in two different libraries
public doSomestuff() {
synchronized(LOCK) {
this.work();
}
}
一見すると、これは非常に単純な同期の例のように見えます。しかし、文字列は抑留されたJava では、リテラル文字列は、"LOCK"
同じインスタンスになりますjava.lang.String
(互いにまったく異なる宣言がされているにもかかわらず)。結果は明らかに悪いです。