gpt4 book ai didi

java - 无法理解 java 中的同步

转载 作者:行者123 更新时间:2023-11-30 11:13:17 27 4
gpt4 key购买 nike

大家好我正在做一个简单的程序来计算从 0 到 99 的数字总和。我正在阅读 Java 中的线程,我试图了解它是如何工作的,尤其是多线程,所以我写了一个简单的程序来理解概念。但是我的程序的输出是不同的,因为它输出 0 和 4950。似乎有 2 个线程在运行?主线程然后对象线程一个?我的输出有问题,因为它们不同步。我希望我走在正确的轨道上,但不确定并且需要指导。有人可以解释一下如何使用同步来解决这个问题。难以理解?

public class Testing {
public static void main(String[] args) {
ThreadB b = new ThreadB();
Thread a = new Thread(b);
a.start();
System.out.println(b.total);
}
}

class ThreadB extends Thread {
int total;

public ThreadB() {
this.total = 0;
}

public synchronized int total() {
for(int i = 0; i < 100; i++) {
total += i;
}
return total;
}

public void run() {
System.out.println(total());
}
}

最佳答案

您有两个线程:主线程和线程“a”。您有另一个对象 b,它继承自 Thread,但您将其视为 int。

您运行线程 a,它执行求和并打印结果。然后打印存储 b 中的值。

同步没有问题,因为您的线程都不共享相同的变量。 int total 在a 和b 之间是不同的。如果你想创建一个问题,让 int 成为测试的成员。

关于java - 无法理解 java 中的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493854/

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