akp*_*akp 1 java concurrency synchronization
将跟随2个代码块实现相同的结果.那么有什么不同呢?
class test {
Object obj = new Object();
void test(){
synchronized(obj){
}
}
void test1(){
synchronized(this){
}
}
}
Run Code Online (Sandbox Code Playgroud)
不,他们不做同样的事情.其中一个获取"this"上的监视器,另一个获取被引用的对象上的监视器obj.
通常,使用私有变量进行同步更好,不要将变量值暴露给任何其他代码.这意味着您知道类中的代码是唯一将在该对象上进行同步的代码,这使您的代码更易于推理.如果您在任何其他代码也可以同步的监视器上同步(包括this引用),那么在考虑线程安全,死锁等时,您需要更多的代码来推理.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |