Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程求和_Java_Multithreading_Exception_Exception Handling - Fatal编程技术网

Java 多线程求和

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

我打算对一个大长度数组(例如30000000)求和,并优化时间消耗

我正在跟进多线程的想法。。。例如,我为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();



    }
}


使用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();