Java 如何计算两个线程的素数总和
现在我有两个线程,第一个线程编号是5,7,第二个线程编号是11,13 我想把线程数加起来,比如5+7+11+13,但我不想把这些数加起来,因为当我试图加起来的时候,只有5+7=11(它只来自一个线程) 那么我如何从两个线程中求和呢 我所尝试的: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
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你确定你已经测试了整个代码吗?它打印正确。