Hãy tưởng tượng bạn có mã để có được những phần tử lớn nhất trong một mảng:
int[] array = new int[] {.........};
/// Few/many lines of code between...
Arrays.sort(array);
int largest = array[array.length - 1];
Nếu sắp xếp được sinh ra trong chủ đề khác, bạn muốn có một tình trạng chủng tộc - bạn sẽ sắp xếp mảng đầu tiên , hoặc sẽ largest
được chỉ định trước? Bạn có thể tránh sự cố đó bằng cách khóa array
, nhưng điều gì sẽ xảy ra nếu mã bạn đang chạy trong khóa đã bị khóa array
? Bạn có thể chặn chuỗi ban đầu bằng cách sử dụng join()
, nhưng sau đó bạn đã đánh bại khá nhiều mục đích sinh ra một chuỗi khác, vì mã của bạn sẽ hoạt động chính xác theo cùng cách như thể không có chuỗi bổ sung nào sinh ra.
Đối với Arrays#sort()
, việc sắp xếp diễn ra trong chuỗi ban đầu, vì thực sự không có nhiều điểm trong việc sinh ra một chuỗi khác. Chuỗi của bạn sẽ chặn cho đến khi sắp xếp xong, giống như bất kỳ đoạn mã nào khác.
Điều gần nhất để sinh ra một chuỗi khác để sắp xếp là phương pháp Arrays#parallelSort()
được giới thiệu trong Java 8. Điều này vẫn hoạt động khá giống với thường lệ Arrays#sort()
, vì nó chặn chuỗi hiện tại của bạn cho đến khi sắp xếp xong, nhưng có chủ đề sinh ra trong nền để giúp sắp xếp mảng. Đối với các tập dữ liệu lớn hơn, tôi mong đợi một sự cải thiện xung quanh số lượng các chủ đề được sinh ra, trừ đi bất cứ luồng nào có thể có.
Được gọi trên cùng một chuỗi. –