同步:-锁定Integer的变量值

时间:2019-06-03 13:44:17

标签: java synchronization thread-synchronization

我是编程和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 //已同步(数字)

0 个答案:

没有答案