マルチスレッドに慣れるための入門的なJavaプログラムを書いていますが、モニタに少し問題があります。特に、以下のコードセクションでは、primes [0] .notifyAll()を呼び出したときにIllegalMonitorStateExceptionがスローされています。 synchronizedキーワードのJavaコードセクションにモニタがあるようにする方法
Integer[] primes=new Integer[3];
if(primes[0]>0{
{
synchronized(primes[0]){
int returning=primes[0];
primes[0]=0;
primes[0].notifyAll();
return returning;}
}
私の理解では、それは私がのnotifyAll()の呼び出しのためのモニターを持っていなければならないというロジックによるので、コードブロックに入る前に、あなたがモニターを持っていたことが確実ということでした。私はJavaが同期に使用する戦略を誤解していますか、それとも実装しているところにバグがありますか?
Ahh、gotcha。どうもありがとう。 – Jonathan