Java 多线程求和
我打算对一个大长度数组(例如30000000)求和,并优化时间消耗 我正在跟进多线程的想法。。。例如,我为3000长度的数组编写了一个代码,将其除以3个不同的线程,得到每三个线程的总和,并在最后一步中使用顺序加法 不幸的是,我在处理3个线程中的异常时出错。 如控制台消息中所述 有什么帮助吗Java 多线程求和,java,multithreading,exception,exception-handling,Java,Multithreading,Exception,Exception Handling,我打算对一个大长度数组(例如30000000)求和,并优化时间消耗 我正在跟进多线程的想法。。。例如,我为3000长度的数组编写了一个代码,将其除以3个不同的线程,得到每三个线程的总和,并在最后一步中使用顺序加法 不幸的是,我在处理3个线程中的异常时出错。 如控制台消息中所述 有什么帮助吗 //File Name : ThreadClassDemo.java package experiment; import java.util.Arrays; public class ThreadCl
//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();
}
}
使用Java8您可以
long sum = IntStream.of(array).parallel().sum();
这将分解阵列,以便可以使用机器上的每个CPU
注意:如果你只有几千个数字要加起来,你可能会发现开始一个线程需要更长的时间。i、 e.您需要对一个非常大的数组求和才能看到改进。如果您使用的是Java 8,那么使用streams可以更轻松地完成此操作……您的构造函数中的赋值是向后的。它应该是
arr=xarr代码>
Exception in thread "Thread-0" Exception in thread "Thread-2" Exception in thread "Thread-1"
long sum = IntStream.of(array).parallel().sum();