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;
}
Il metodo statico precedente esegue la ricerca binaria. È thread-safe? So che le variabili locali sono thread-safe ma "a" qui è un array, quindi significa che è un oggetto in Java, giusto? È un problema? L'array è appena stato letto, non modificato in alcun modo, quindi presumo che questo metodo sia thread-safe. Ma voglio essere sicuro di capire perché.Gli array Java in un metodo statico thread safe?
Grazie!
Capisco. Quindi il codice non è thread-safe anche se l'array non è modificato, giusto? Ma finché ogni thread che chiama questo metodo lo fa con un oggetto array diverso, la vita è buona. – user247866
BTW - Non penso sia giusto dire che gli array vengono passati per riferimento (ma capisco cosa intendevi). Più precisamente per dire che il riferimento dell'array è passato per valore. Grazie! – user247866
Solo perché qualche altro thread potrebbe modificarlo nello stesso momento in cui lo stai leggendo. –