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;
}
上面的靜態方法可以進行二分查找。線程安全嗎?我知道局部變量是線程安全的,但這裏的「a」是一個數組,所以這意味着它是Java中的對象,對吧?那是問題嗎? 數組剛剛被讀取,沒有以任何方式修改,所以我假設這個方法是線程安全的。但我想確保我明白爲什麼。靜態方法中的Java數組是否安全?
謝謝!
我明白了。所以即使數組沒有被修改,代碼也不是線程安全的,對吧?但只要每個調用此方法的線程都使用不同的數組對象,生活就會很好。 – user247866
順便說一句 - 我不認爲這是正確的說數組通過引用傳遞(但我明白你的意思)。更準確地說,數組引用是按值傳遞的。謝謝! – user247866
僅僅因爲其他線程可能會在您讀取它的同時對其進行修改。 –