gpt4 book ai didi

java - 这个线程程序每次都会向我显示不同的答案

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:46 25 4
gpt4 key购买 nike

这是一个查找 1-500000 中最大除数的 Java 程序。

public class Medium2 {  
static int count1 = 1;
static int count2 = 1;
static int big_count = 0;
static int big = 0;

主要方法

  public static void main(String[] args) {  
Runnable runnable1 = new Runnable() {
public void run() {

这里是实现

    for (int num = 1; num <= 500000; num++) {  
for (int i = 2; i <= num; i++) {
if (num % i == 0) { //Actual Logic
count1++;
}
}
if (count1 > big_count) {
big_count = count1; //Number of Divisors
big = num; //Largest Number
}
count1 = 1;
}
}
};

以及线程执行

Thread thread1 = new Thread(runnable1);  //Threads
Thread thread2 = new Thread(runnable1);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException ie) {
;
}
System.out.println("Biggest: " + big + "\nNumber of Divisors for " + big + " = " + big_count);
}
}

但每次都会给出不同的答案。实际答案是:498960 和 200 除数

最佳答案

关于您的目标,您的实现可能应该存在问题。由于 big_countbig 对于两个线程来说都是通用的,并且当线程尝试修改它们时没有任何保护,因此您的程序应该会产生错误。

除此之外,您也没有使用 2 个线程,因为两个线程都在进行从 1 到 500000 的计算。

由于您的计算逻辑看起来不错,因此当您尝试使用单线程时,您应该会得到所需的输出。

如果你希望它通过两个线程来完成,你可以轻松地尝试这个。 (只是为了验证,不是最好的方法)

  • 您应该有 big_count1big1big_count2big2。这样,名称以“1”结尾的变量只能被线程1使用,而名称以“2”结尾的变量只能被线程2使用。

  • 分配线程 1 检查 1 到 250000 的范围,分配线程 2 检查 250001 到 500000 的范围。

  • join()之后,只需比较big_count1big_count2,就可以推导出最终答案。 :))

关于java - 这个线程程序每次都会向我显示不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956329/

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