簡體   English   中英

Java 處理一個數組多線程

[英]Java process one array with multiple threads

我想在我的程序中實現多個線程。 這些多個線程應該能夠處理一個數組。

例如:

我有一個 integer 數組:

int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

現在,多個線程應該將每個項目打印到控制台,如下所示:

1 //Printed by Thread 1
2 //Printed by Thread 2
7 //Printed by Thread 1
8 //Printed by Thread 2
9 //Printed by Thread 3
4 //Printed by Thread 1
5 //Printed by Thread 2
6 //Printed by Thread 3
3 //Printed by Thread 3
10 //Printed by Thread 1
11 //Printed by Thread 2
12 //Printed by Thread 3

(結果是否隨機並不重要。)

到目前為止,我的解決方案是將數組拆分為更小的塊。 這是有效的,但我不太喜歡這個解決方案,我認為這不是真正的線程安全

    public static void main(String[] args) {

        int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

        int chunk = 3;
        for (int i = 0; i < integerArray.length; i += chunk) {

            int finalI = i;

            new Thread(() -> {
                int[] splittedArray = Arrays.copyOfRange(integerArray, finalI, Math.min(integerArray.length, finalI + chunk));
                for (int value : splittedArray) {
                    System.out.println(value);
                }

            }).start();
        }

    }

出於您在上面給出的示例中的目的,您不需要拆分數組以將部分傳遞給並行線程。 使用並行流處理數組元素將為您完成:

public static void main(String... args) {
    int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    Arrays.stream(integerArray)
            .parallel()
            .forEach(x -> System.out.println(Thread.currentThread().getName() + " printed value: " + x));
}

在 output 上,您可以看到ForkJoinPool-Worker-Threads正在打印您的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM