gpt4 book ai didi

java - 多线程求和

转载 作者:行者123 更新时间:2023-11-30 03:07:34 26 4
gpt4 key购买 nike

我正在对一个大长度数组(例如 30,000,000)求和并优化时间消耗。

我正在跟进多线程的想法...例如,我编写了一个 3000 长度数组的代码,并除以 3 个不同的线程,并获得每个三分之一的总和,并在最后一步中仅使用顺序加法 ..

不幸的是,我在处理 3 个线程中的异常时遇到了错误。正如控制台消息中提到的那样。

有什么帮助吗?

//File Name : ThreadClassDemo.java

package experiment;

import java.util.Arrays;

public class ThreadClassDemo {
public static void main(String[] args) {

double xarr[] = new double[3000];
Arrays.fill(xarr, 1);
System.out.println(xarr[2999]);

double x=0;
Runnable first1 = new DisplayMessage(x,xarr,0,999);
Thread thread1 = new Thread(first1);
thread1.setDaemon(true);
thread1.start();


double y=0;
Runnable first2 = new DisplayMessage(y,xarr,1000,1999);
Thread thread2 = new Thread(first2);
thread2.setDaemon(true);
thread2.start();

double z=0;
Runnable first3 = new DisplayMessage(z,xarr,2000,2999);
Thread thread3 = new Thread(first3);
thread3.setDaemon(true);
thread3.start();



}
}
<小时/>
  package experiment;
//File Name : DisplayMessage.java
//Create a thread to implement Runnable
public class DisplayMessage implements Runnable {
public double result = 0;
private double arr[];
private int num1;
private int num2;

public DisplayMessage(double i, double[] xarr, int j, int k) {
result = i;
xarr = arr;
num1 = j;
num2 = k;
}

/*
* public DisplayMessage(String message) { this.message = message; }
*/
public double getresult(){return result;}
public void run() {

try {
System.out.println("dsfsfs");
for (int i = num1; i <= num2; i++) {
result += arr[i];
}
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println(" interrupted.");
}

}
}

控制台:

Exception in thread "Thread-0" Exception in thread "Thread-2" Exception in thread "Thread-1" 

最佳答案

使用 Java 8 你可以做到

long sum = IntStream.of(array).parallel().sum();

这将分解阵列,以便您计算机上的每个 CPU 都可以使用。

注意:如果您只有几千个数字需要加起来,您可能会发现启动一个线程需要更长的时间。也就是说,您需要对一个非常大的数组求和才能看到改进。

关于java - 多线程求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363406/

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