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
仅仅因为其他线程可能会在您读取它的同时对其进行修改。 –