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;
}
El método estático anterior realiza la búsqueda binaria. ¿Es seguro para subprocesos? Sé que las variables locales son seguras para hilos, pero "a" aquí es una matriz, lo que significa que es un objeto en Java, ¿verdad? ¿Es eso un problema? La matriz solo se está leyendo, no se ha modificado de ninguna manera, por lo que supongo que este método es seguro para subprocesos. Pero quiero asegurarme de entender por qué.¿Son seguras las matrices de Java en un método estático?
Gracias!
Ya veo. Entonces, el código no es seguro para subprocesos aunque la matriz no se modifique, ¿verdad? Pero mientras que cada hilo que llama a este método lo haga con un objeto de matriz diferente, la vida es buena. – user247866
BTW - No creo que sea correcto decir que las matrices se pasan por referencia (pero entiendo lo que quiso decir). Más precisamente para decir que la referencia de matriz se pasa por valor. ¡Gracias! – user247866
Solo porque algún otro subproceso podría modificarlo al mismo tiempo que lo está leyendo. –