現在、Javaでモニタの使用を学習していますが、同期メソッドの仕組みがわかりません。Javaモニタの同期メソッド
私は、あるスレッドが同期メソッドの中にある間に、別のスレッドを同期メソッドの中に入れることができず、スリープが自分自身の所有権を引き取らないことを理解します。
ので、私はNBAやNBBが1よりも優れていることは不可能であったか、NBBとNBAの両方が> 0ですが、それは
が起こっていると考えられ
import java.util.Random;
public class ex3 extends Thread {
private static int nbA=0;
private static int nbB=0;
public static final Random rand = new Random();
public void run(){
while(true){
System.out.println(nbA+" "+nbB);
try{
Thread.sleep(rand.nextInt(500));
}catch (Exception e){e.printStackTrace();}
if (rand.nextBoolean()){
try {
A();
} catch (InterruptedException e) {}
}else{
try {
B();
} catch (InterruptedException e) {}
}
}
}
public synchronized void A() throws InterruptedException{
nbA++;
Thread.sleep(rand.nextInt(500));
nbA--;
}
public synchronized void B() throws InterruptedException{
nbB++;
Thread.sleep(rand.nextInt(500));
nbB--;
}
public static void main(String[] argv){
new ex3().start();
new ex3().start();
new ex3().start();
}
}
ことをテストするコードを記述してみました私は何を誤解していますか?
ご迷惑をかけて申し訳ありません。