我在java中自學多線程。我的虛擬示例是我有一大堆我想要排序的記錄(一個2D數組)。單線程方法是使用循環遍歷記錄列表和排序。我想用多線程程序對固定數量的線程進行排序,在這種情況下,2.一個線程將對列表的前半部分進行排序,第二個線程將對剩下的一半進行排序。然後我想輸出現在排序的記錄列表的結果。如何在java中使用多線程對記錄列表進行排序?
如何創建一個工作線程池並對記錄列表進行排序?我需要擔心data
是共享資源嗎?如何將每個線程的結果返回到原始記錄列表?以下是我的代碼。
import java.util.*;
class RunnableProcess implements Runnable {
private int[] data;
public RunnableProcess(int[] data) {
this.data = data;
}
public void run() {
try {
// sort the records this thread has access to
for (int i = 0; i < data.length; i++) {
Arrays.sort(data[i]);
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
class BigData {
static int[][] data = new int[1000][1000];
public static void main(String [] args) {
// Create records
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
data[i][j] = new Random().nextInt(999);
}
}
// Call on two threads to sort the data variable
// ExecutorService executor = Executors.newFixedThreadPool(2);
// Python type of idea: Pass half the records to each thread and start
// java doesn't support this so what is the java way of doing this?
// Thread thread = new Thread(new RunnableProcess(data[:499]));
// thread.start();
// Thread thread = new Thread(new RunnableProcess(data[499:]));
// thread.start();
}
}
我很樂意提供解決此問題的最佳方法。
查看'ArrayList'和['ArrayList <> #subList()'](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#subList(int ,%20int)) – AJNeufeld
你已經忘記了你需要做的第三步 - 合併排序後的結果。看看合併排序算法! –