Java 这个线程程序每次都向我显示不同的答案
这是一个Java程序,用于查找除数在1-500000之间的最大数Java 这个线程程序每次都向我显示不同的答案,java,multithreading,concurrency,thread-safety,java-threads,Java,Multithreading,Concurrency,Thread Safety,Java Threads,这是一个Java程序,用于查找除数在1-500000之间的最大数 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
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;
}
}
};
但每次都会给出不同的答案。实际答案是:498960和200除数关于您的目标,您的实现可能会有问题。由于
big\u count
和big
对于这两个线程都很常见,并且在线程试图修改它们时没有任何保护,因此您的程序应该会产生错误
除此之外,您也没有使用2个线程,因为这两个线程都在进行从1到500000的计算
由于您的计算逻辑似乎正常,所以当您尝试使用单线程时,应该会得到所需的输出
如果您希望它由两个线程完成,您可以很容易地尝试这个。(只是为了验证,不是最好的方式)
- 你应该有
,big_count1
和big1
,big_count2
。因此,名称以“1”结尾的变量仅由thread1使用,而名称以“2”结尾的变量仅由thread2使用big2
- 将thread1指定为检查范围从1到250000,将thread2指定为检查范围从250001到500000
- 在
s之后,只需比较join()
和big_count1
,即可推断出最终答案。:)big_count2
big\u count
和big
对于这两个线程都很常见,并且在线程试图修改它们时没有任何保护,因此您的程序应该会产生错误
除此之外,您也没有使用2个线程,因为这两个线程都在进行从1到500000的计算
由于您的计算逻辑似乎正常,所以当您尝试使用单线程时,应该会得到所需的输出
如果您希望它由两个线程完成,您可以很容易地尝试这个。(只是为了验证,不是最好的方式)
- 你应该有
,big_count1
和big1
,big_count2
。因此,名称以“1”结尾的变量仅由thread1使用,而名称以“2”结尾的变量仅由thread2使用big2
- 将thread1指定为检查范围从1到250000,将thread2指定为检查范围从250001到500000
- 在
s之后,只需比较join()
和big_count1
,即可推断出最终答案。:)big_count2
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);
}
}