use*_*866 8 java static-methods thread-safety
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;
}
Run Code Online (Sandbox Code Playgroud)
上面的静态方法进行二分查找.它是线程安全的吗?我知道局部变量是线程安全的,但"a"这里是一个数组,所以这意味着它是Java中的一个对象,对吧?那是问题吗?刚刚读取数组,没有以任何方式进行修改,所以我假设这个方法是线程安全的.但我想确保理解为什么.
谢谢!
没有数组通常不是线程安全的.代码是否在这种情况下取决于其他线程是否可以访问您传入的数组.由于数组是通过引用传递的,因此其他线程可以访问它们.
如果您只在一个线程中创建/修改数组,或者传入一个以线程安全方式复制的副本,那就没问题了.
归档时间: |
|
查看次数: |
3643 次 |
最近记录: |