【发布时间】:2017-10-02 22:36:26
【问题描述】:
我目前正在学习 Java 中监视器的使用,但我不知道同步方法是如何工作的。
我了解,当一个线程在同步方法中时,另一个线程不能在同步方法中,并且睡眠不会剥夺监视器自己的所有权。
所以我试着写一个代码来测试一下
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();
}
}
我认为 nbA 或 nbB 不可能优于 1,或者 nbB 和 nbA 都 >0 但它正在发生
我误会了什么?
抱歉英语不好。
【问题讨论】:
标签: java multithreading synchronized monitor