gpt4 book ai didi

java - 同步增加一个 int 值

转载 作者:行者123 更新时间:2023-12-01 00:41:20 26 4
gpt4 key购买 nike

为什么这个程序在每次执行时不显示 2000?我知道我可以使用 AtomicInteger,但我很好奇。

class Increment extends Thread{
static Integer i=new Integer(0);

public void run(){

for(int j=1;j<=1000;j++){
synchronized (i) {
i++;
}
}

}
}


public class Puzzle {
public static void main(String args[]) {
Thread t1=new Increment();
Thread t2=new Increment();
t1.start();
t2.start();
try {
t1.join();
t2.join();
}catch (InterruptedException r){}
System.out.println(Increment.i);
}
}

最佳答案

您在可变变量上同步 i .这个变量每次都会改变它的值,因此每次你获得另一个对象的锁时。因此,每个线程都获得一个非争用锁并且可以同时进行,就好像没有同步。

类(class):使用专用 private static final Object lock = new Object()作为锁。

关于java - 同步增加一个 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com