Java 如何计算两个线程的素数总和

Java 如何计算两个线程的素数总和,java,multithreading,Java,Multithreading,现在我有两个线程,第一个线程编号是5,7,第二个线程编号是11,13 我想把线程数加起来,比如5+7+11+13,但我不想把这些数加起来,因为当我试图加起来的时候,只有5+7=11(它只来自一个线程) 那么我如何从两个线程中求和呢 我所尝试的: public class MyThread { public static void main(String[]args){ Scanner sc = new Scanner(System.in); //input

现在我有两个线程,第一个线程编号是5,7,第二个线程编号是11,13

我想把线程数加起来,比如5+7+11+13,但我不想把这些数加起来,因为当我试图加起来的时候,只有5+7=11(它只来自一个线程)

那么我如何从两个线程中求和呢

我所尝试的:

public class MyThread {
    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        //input from user
        System.out.print("Please input x: ");
        int start = sc.nextInt();

        Thread t1 = new Thread(()->sayHello(start));
        t1.start();
        Thread t2 = new Thread(()->number(start));
        t2.start();


    }
    public static void sayHello(int start){
        {
            int count;
            //loop for finding and printing all prime numbers between given range
            for (int i = start; i <= start+5; i++) {
                //logic for checking number is prime or not
                count = 0;
                for (int j = 1; j <= i; j++) {
                    if (i % j == 0)
                        count = count + 1;
                }
                if (count == 2)
                    System.out.println(Thread.currentThread().getName() + ":" + i);

                }
            //closing scanner class(not mandatory but good practice)
           // sc.close();
        }
    }

    public static void number(int start) {

        {
            //scanner class object creation

            int count;
            //loop for finding and printing all prime numbers between given range
            for (int i = start+5; i <=start+10; i++) {
                //logic for checking number is prime or not
                count = 0;
                for (int j = 1; j <= i; j++) {
                    if (i % j == 0)
                        count = count + 1;
                }
                if (count == 2)
                    System.out.println(Thread.currentThread().getName()+":" + i );
            }
         
        }
    }
    }
公共类读取{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
//用户输入
系统输出打印(“请输入x:”;
int start=sc.nextInt();
线程t1=新线程(()->sayHello(start));
t1.start();
线程t2=新线程(()->编号(开始));
t2.start();
}
公共静态void sayHello(int start){
{
整数计数;
//查找和打印给定范围内所有素数的循环

对于(int i=start;i我将共享一个通过忙等待完成的解决方案。要改进它,可以检查结构。它返回36作为总和

package training;

import java.util.Scanner;

public class MyThread {

  private static int sumOfThreads;

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // input from user
    System.out.print("Please input x: ");
    int start = sc.nextInt();

    Thread t1 = new Thread(() -> sayHello(start));
    t1.start();

    Thread t2 = new Thread(() -> number(start));
    t2.start();

    while (t2.isAlive() || t1.isAlive()) { // Busy waiting
    }
    System.out.println("Sum: " + sumOfThreads);
  }

  synchronized private static void addIntoSum(int input) {
    sumOfThreads += input;
  }

  public static void sayHello(int start) {
    {
      int count;
      // loop for finding and printing all prime numbers between given range
      for (int i = start; i <= start + 5; i++) {
        // logic for checking number is prime or not
        count = 0;
        for (int j = 1; j <= i; j++) {
          if (i % j == 0)
            count = count + 1;
        }
        if (count == 2) {
          System.out.println(Thread.currentThread().getName() + ":" + i);
          addIntoSum(i);
        }
      }
      // closing scanner class(not mandatory but good practice)
      // sc.close();
    }
  }

  public static void number(int start) {

    {
      // scanner class object creation

      int count;
      // loop for finding and printing all prime numbers between given range
      for (int i = start + 5; i <= start + 10; i++) {
        // logic for checking number is prime or not
        count = 0;
        for (int j = 1; j <= i; j++) {
          if (i % j == 0)
            count = count + 1;
        }
        if (count == 2) {
          System.out.println(Thread.currentThread().getName() + ":" + i);
          addIntoSum(i);
        }
      }

    }
  }
}
成套培训;
导入java.util.Scanner;
公共类神话阅读{
私有静态整合式读取;
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
//用户输入
系统输出打印(“请输入x:”;
int start=sc.nextInt();
线程t1=新线程(()->sayHello(start));
t1.start();
线程t2=新线程(()->编号(开始));
t2.start();
而(t2.isAlive()| | t1.isAlive()){//忙着等待
}
System.out.println(“总和:+sumOfThreads”);
}
同步私有静态void addIntoSum(int输入){
SumThreads+=输入;
}
公共静态void sayHello(int start){
{
整数计数;
//查找和打印给定范围内所有素数的循环

对于(int i=start;i)线程中有一个等待的概念……请先阅读它。可以显示示例,例如如何键入此代码,因为我无法理解它5+7=11?这听起来不正确。^^我在这个解决方案中没有看到任何繁忙的等待。您只是在使用锁。while(t2.isAlive()| t1.isAlive())正在强制等待线程完成。如果忽略这一部分,我们将在线程完成之前的一瞬间打印总和。因此,结果将是错误的。哦,那!我认为使用
thread.join()可以
将是等待线程变为芬兰语的更合适的方法。我使用此代码,但返回的总和是错误的。那么如何修复it@UlaLee你确定你已经测试了整个代码吗?它打印正确。