use*_*513 2 java synchronization locking
考虑以下代码段:
Object bar1 = new ... ;
Object bar2 = new ... ;
Object foo = (either bar1 or bar2) ;
Run Code Online (Sandbox Code Playgroud)
现在,foo在程序的不同时间可以是bar1或bar2.我只想检查synchronized(foo)是否会锁定相应的bar1或bar2.这似乎是最有可能的情况,因为对象不是用Java复制的.它是否正确?
Object bar1 = new Object();
Object foo = bar1;
synchronized(foo) {
...
}
Run Code Online (Sandbox Code Playgroud)
将锁定foo== bar1.
然而,这是一个奇怪且容易出错的构造.例如:
现在你有2个线程同时运行你的synchronized块.我真的找不到你想要的原因.如果你这样做,那么该块可能不应该同步,你应该使用不同的锁定策略.
另见这篇相关文章.