如何创建4个线程添加元素到数组列表?



如何调整这段代码,以便将arr1分成4部分,并创建4个线程来向intlist1添加元素。线程1处理arr1的第一季度,线程2处理第二季度,线程3处理第三季度,线程4处理arr1的最后一季度。注意,稍后将使用intList1。

void process() throws IOException {
List<Integer> intList1 = new ArrayList<Integer>();
for (int i = 0; i < arr1 .length; i++) {
for (int j = 1; j < 13; j++) {
if (arr1 [i][2] == arr2[j]) {
intList1.add(arr1 [i][0]);
break;
}
}
}
if (intList1.size() > 0) {
// some code here
}
}

我不知道它是否实际上是4个线程,但我认为这是正确的方法,这样做与多线程。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
// CREATE arr1 ARRAY OF INTEGERS
int arr1[] = new int[40];
for(int i = 0;i < arr1.length;i++) arr1[i] = i;
// CREATE intList1 empty ArrayList and thread safe sintList
List<Integer> intList1 = new ArrayList<Integer>();
List<Integer> sintList1 = Collections.synchronizedList(intList1);
// PRINT arr1 CONTENT (INCREASING)
for(int i : arr1) System.out.print(i + " ");
System.out.println();
// PROCESS ARRAY WITH MULTIPLE THREADS
Arrays.stream(arr1).parallel().forEach(x -> sintList1.add(x));
// PRINT intList1 CONTENT (MESSED UP BY MULTIPLE THREADS)
for(int i : intList1) System.out.print(i + " ");
System.out.println();
// OPERATION IS THREADSAFE IF SUM OF ELEMENTS IS EQUAL AFTER OPERATION
int s1 = 0, s2 = 0;
for(int i : arr1) s1 += i;
for(int i : intList1) s2 += i;
System.out.println(s1);
System.out.println(s2);
}
}
我的输出是:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 
26 25 28 29 27 22 24 23 21 20 36 35 38 39 37 6 33 30 31 16 5 15 12 8 14 2 9 13 4 11 7 3 10 1 0 32 34 17 19 18 
780
780

编辑:

arr1是二维数组,我漏掉了。还有,你说,arr1是(40,000,000 * 3),让它是(3 * 40,000,000),否则我不知道任何简单的解。

// CREATE arr1 2D ARRAY OF INTEGERS
int n = 3, m = 40;
int arr1[][] = new int[n][m];
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++)
arr1[i][j] = j;
// CREATE arr2 ARRAY OF INTEGERS
int arr2[] = new int[10];
for(int i = 0;i < arr2.length;i++) arr2[i] = i;
// CREATE intList1 empty ArrayList and thread safe sintList
List<Integer> intList1 = new ArrayList<Integer>();
List<Integer> sintList1 = Collections.synchronizedList(intList1);
// PRINT arr1 CONTENT (INCREASING)
for(int i : arr1[2]) System.out.print(i + " ");
System.out.println();
// PROCESS ARRAY WITH MULTIPLE THREADS
Arrays.stream(arr1[2]).parallel().forEach(x -> {
for(int i : arr2) if(i == x) sintList1.add(x);
});
// PRINT intList1 CONTENT (MESSED UP BY MULTIPLE THREADS)
for(int i : intList1) System.out.print(i + " ");
System.out.println();
// OPERATION IS THREADSAFE IF SUM OF ELEMENTS IS EQUAL AFTER OPERATION
int s1 = 0, s2 = 0;
for(int i = 0;i < 10;i++) s1 += arr1[2][i];
for(int i : intList1) s2 += i;
System.out.println(s1);
System.out.println(s2);
System.out.println();