如何将数组拆分为多个线程 Java



所以我有一个MaxThread类,run((方法将传递的向量的最大值存储到maxValue类属性中。我想将 10 个整数的初始数组拆分为 4 个子数组,每个子数组都有不同的线程。从 4 个子数组中的每一个中找到 4 个最大值后,我想创建一个新的 MaxThread 并显示其中的最大值。这段代码有效,但我想不出更好的方法来做到这一点,因为我确信我所做的是愚蠢的(我是新手(。

public class Main{
    public static void main(String[] args) {
        int step = 3;
        Integer[] vector = new Integer[10];
        readFromFile(vector);
        int i = 0;
        ArrayList<MaxThread> threads = new ArrayList<>();
        MaxThread t1 = null;
        MaxThread t2 = null;
        MaxThread t3 = null;
        MaxThread t4 = null;
            t1 = new MaxThread(vector, 0, 3);
            threads.add(t1);
            t1.start();
            t2 = new MaxThread(vector, 3, 6);
            threads.add(t2);
            t2.start();
            t3 = new MaxThread(vector, 6, 9);
            threads.add(t3);
            t3.start();
            t4 = new MaxThread(vector, 9, 10);
            threads.add(t4);
            t4.start();

        for (MaxThread thread : threads) {
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        Integer[] last = new Integer[4];
        last[0]=t1.getMaxVal();
        last[1]=t2.getMaxVal();
        last[2]=t3.getMaxVal();
        last[3]=t4.getMaxVal();
        MaxThread lastThread = new MaxThread(last, 0, last.length);
        lastThread.start();
        try {
            lastThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Valoarea maxima:" +lastThread.getMaxVal());
    }

这是并行流的一个很好的例子。通常,只有当您至少有数万个元素时,多线程才值得。在这些情况下,拥有一个基元数组也是值得的。

public static void main(String[] args) {
    int[] vector = // ...
    int max = Arrays.stream(vector).parallel().max().getAsInt();
}

最新更新