这个线程程序每次都给我不同的答案
This thread program shows me different answers every time
这是一个 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 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_count
和 big
对于两个线程都是通用的,并且当线程试图修改它们时没有任何保护,您的程序应该会产生错误。
除此之外,您也没有使用 2 个线程,因为两个线程都在计算 1 到 500000。
因为你的计算逻辑看起来没问题,当你尝试单线程时你应该得到你想要的输出。
如果你想让它通过两个线程来完成,你可以很容易地试试这个。 (只是为了验证,不是最好的方法)
您应该有 big_count1
、big1
和 big_count2
、big2
。因此,名称以“1”结尾的变量仅供线程 1 使用,名称以“2”结尾的变量仅供线程 2 使用。
分配线程 1 检查 1 到 250000,线程 2 分配 250001 到 500000。
在join()
之后,再比较big_count1
和big_count2
,就可以推导出最终答案了。 :))
这是一个 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 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_count
和 big
对于两个线程都是通用的,并且当线程试图修改它们时没有任何保护,您的程序应该会产生错误。
除此之外,您也没有使用 2 个线程,因为两个线程都在计算 1 到 500000。
因为你的计算逻辑看起来没问题,当你尝试单线程时你应该得到你想要的输出。
如果你想让它通过两个线程来完成,你可以很容易地试试这个。 (只是为了验证,不是最好的方法)
您应该有
big_count1
、big1
和big_count2
、big2
。因此,名称以“1”结尾的变量仅供线程 1 使用,名称以“2”结尾的变量仅供线程 2 使用。分配线程 1 检查 1 到 250000,线程 2 分配 250001 到 500000。
在
join()
之后,再比较big_count1
和big_count2
,就可以推导出最终答案了。 :))