gpt4 book ai didi

java - 同步方法没有给出正确的结果

转载 作者:行者123 更新时间:2023-12-01 17:49:07 25 4
gpt4 key购买 nike

我已经写了下面提到的代码,我期待 12000 作为答案。但没有得到正确的答案。每次运行我都会得到一些新数字

封装线程;

public class ThreadExp extends Thread {

static volatile int count=0;

public synchronized void increment() {
count++;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadExp a = new ThreadExp();
a.start();
ThreadExp a1 = new ThreadExp();
a1.start();

try {
a.join();
a1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(count);
}

public void run() {
for(int i=1; i<=6000 ;i++) {
increment();
}
}
}

最佳答案

非静态同步方法在 this 对象上进行同步(请参阅 JLS, §8.4.3.6 )。因此,您使用的 ThreadExp 的两个实例不会执行互斥的 increment()

您可以通过将 increment() 定义为 static 来解决问题,因为静态方法在表示类型的 class-Object 上同步。

Elliott Frisch 提到了另一个解决方案:使用 AtomicInteger而不是 volatile int

关于java - 同步方法没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357691/

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