[英]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.