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;
}
Powyższa metoda statyczna wykonuje wyszukiwanie binarne. Czy wątek jest bezpieczny? Wiem, że zmienne lokalne są bezpieczne dla wątków, ale "a" tutaj jest tablicą, co oznacza, że jest to obiekt w Javie, prawda? Czy to problem? Tablica jest właśnie czytana, niezmodyfikowana w żaden sposób, więc zakładam, że ta metoda jest bezpieczna dla wątków. Ale chcę się upewnić, że rozumiem dlaczego.Czy tablice Java w wątku statycznym są bezpieczne?
Dzięki!
Rozumiem. Więc kod nie jest bezpieczny dla wątków, mimo że tablica nie jest zmodyfikowana, prawda? Ale tak długo, jak każdy wątek, który wywołuje tę metodę, robi to z innym obiektem tablicy, życie jest dobre. – user247866
BTW - Nie sądzę, że słusznie jest mówić, że tablice są przekazywane przez odniesienie (ale rozumiem, co miałeś na myśli). Dokładniej mówiąc, odniesienie do tablicy jest przekazywane przez wartość. Dzięki! – user247866
Tylko dlatego, że jakiś inny wątek może go modyfikować w tym samym czasie, kiedy go czytasz. –