public static int rank(int key, int[] a) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
// Key is in a[lo..hi] or not present.
int mid = lo + (hi - lo)/2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
Phương thức tĩnh ở trên thực hiện tìm kiếm nhị phân. Nó có an toàn không? Tôi biết rằng các biến cục bộ là luồng an toàn nhưng "a" ở đây là một mảng, do đó điều đó có nghĩa đó là một đối tượng trong Java, phải không? Đó có phải là vấn đề không? Mảng vừa được đọc, không được sửa đổi theo bất kỳ cách nào, vì vậy tôi giả sử phương pháp này là an toàn chỉ. Nhưng tôi muốn chắc chắn rằng tôi hiểu tại sao.Các mảng Java trong một luồng phương thức tĩnh có an toàn không?
Cảm ơn!
Tôi hiểu. Vì vậy, mã không phải là thread an toàn mặc dù mảng không được sửa đổi, phải không? Nhưng miễn là mỗi thread gọi phương thức này thực hiện nó với một đối tượng mảng khác, thì cuộc sống là tốt. – user247866
BTW - Tôi không nghĩ có thể nói rằng các mảng được chuyển qua tham chiếu (nhưng tôi hiểu ý của bạn là gì). Chính xác hơn để nói rằng tham chiếu mảng được truyền theo giá trị. Cảm ơn! – user247866
Chỉ vì một số chủ đề khác có thể sửa đổi nó cùng một lúc bạn đang đọc nó. –