我真的没有看到
之间的执行差异public void foo_fct( Table Tbl, Account act)
{
synchronized(Tbl) {
...
}
}
和此:
public void foo_fct( Table Tbl, Account act)
{
synchronized(act) {
...
}
}
我的意思是,在引擎盖下,JVM必须使用lock()和unlock()我猜? 所以无论发生什么(行为或Tbl),我都会以同样的方式锁定吗?
更新 好的,我现在理解你的帮助和Java doc:
" ...每个对象都有与之关联的内在锁定..."
和"同步语句......"
答案 0 :(得分:1)
是的,有区别,因为您永远不知道哪些其他帖子在sychronized
或Table
上使用了Account
。
问问自己这个问题 - 您是否试图在Table
方法中阻止Account
或sychronized
上foo_fct
块执行期间的其他可变操作?
答案 1 :(得分:0)
synchronized(var)
块将根据您省略的 ... 块产生差异,即您需要同步并发线程访问的变量。
答案 2 :(得分:0)
如果表和帐户以固定的独占对组织,则表示不会通过不同的并发线程使用不同的帐户实例调用表x上的foo_fct(反之亦然),并且代码中没有其他部分可以进行其他同步操作同时在你的程序中的表或帐户,然后两种锁定方式是等效的。
否则两种方法都会有所不同。