Java 8 Tutorial: Arrays.parallelSort
Trước Java 8, chúng ta thường dùng phương thức Arrays.sort để sắp xếp một array. Trong Java 8 chúng ta có thêm một lựa chọn nữa đó là phương thức Arrays.parallelSort.
Về mặt giải thuật, cả 2 phương thức đều dùng phương pháp sắp xếp trộn (merge sort) để sắp xếp array. Còn về mặt xử lý, cái tên parallel cho thấy sẽ có những xử lý song song trong quá trình sắp xếp bằng cách sử dụng Fork/Join framework được giới thiệu từ Java 7. Nó dựa vào các thread “available” trong thread pool để thực hiện công việc sắp xếp đồng thời.
Demo
Sau đây là đoạn code so sánh thời gian thực hiện việc sắp xếp giữa 2 phương thức Arrays.sort và Arrays.parallelSort
public class ArraysParallelDemo {
public static void main(String[] args) throws FileNotFoundException {
List<Double> arraySource = new ArrayList<>();
Scanner reader = new Scanner(ClassLoader.
getSystemResourceAsStream("java8demo/large_array_input"));
while(reader.hasNext()){
String line = reader.nextLine();
String[] strNums = line.split(",");
for ( String strN : strNums){
arraySource.add(Double.parseDouble(strN));
}
}
System.out.println(arraySource.size());
Double [] myArray = new Double[1];
myArray = arraySource.toArray(myArray);
long startTime = System.currentTimeMillis();
Arrays.sort(myArray);
long endTime = System.currentTimeMillis();
System.out.println("Time take in serial: "+
(endTime-startTime)/1000.0);
Double [] myArray2 = new Double[1];
myArray2 = arraySource.toArray(myArray);
startTime = System.currentTimeMillis();
Arrays.parallelSort(myArray2);
endTime = System.currentTimeMillis();
System.out.println("Time take in parallel: "+
(endTime-startTime)/1000.0);
}
}
Kết quả
Không có gì ngạc nhiên khi thấy việc sắp xếp “đa nhân” nhanh hơn sắp xếp trên 1 nhân. Lưu lý là test được thực hiện trên máy tính có CPU 4 nhân.
Kết thúc bài giới thiệu về Arrays.parallelSort trong Java 8 tại đây. Mình rất vui nếu có thể nhận được các đóng góp các ý kiến phản hồi bằng cách comment bên dưới bài viết. Các bạn có thể tham khảo một số bài viết khác trong series Java 8 Tutorial tại đây:
Series Java 8 Tutorial

