我是编程和Java的新手,所以我有这段代码,其中我对整数值num进行了锁定,然后对其进行了递增,因此它不能正常工作,并且如果我对另一个进行了锁定整数,那么它似乎绝对可以正常工作。
NumberIncrement是不同的类,func()函数在不同的类中。
我研究了(我猜这还不够),同步对对象的引用而不是它们的值锁定了
public class NumberIncrement {
Integer num;
Integer number = 5;
NumberIncrement() {
num = 0;
}
public void incNum() {
synchronized (num) {
num++;
}
}
public Integer getNum() {
return num;
}
}
public static void func() throws InterruptedException {
NumberIncrement numberIncrement = new NumberIncrement();
Runnable runnable = () -> {
for(int i=0;i<100000;i++)
// System.out.println(Thread.currentThread().getName() +" : "+ numberIncrement.getNum());
numberIncrement.incNum();
};
Thread thread1 = new Thread(runnable);
Thread thread2 = new Thread(runnable);
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("Done "+numberIncrement.getNum());
}
完成140289 //用于同步(数字)
完成200000 //已同步(数字)