繁体   English   中英

在局部变量上同步,比同步方法更好?

[英]synchronized on local variable, better than synchronized methods?

我围绕数据库查询编写了一个包装器,需要从不同的线程访问它。 因此,我的应用程序恰好创建了该帮助程序类的一个实例,并通过getter返回它。

DbConnection dbc = app.getDatabaseConnection();
synchronized (dbc) {
  dbc.doSomething();
}

此代码安全吗? 如前所述这里它应该工作,虽然在一个局部变量的同步。 只要保证对象实例相同,这是正确的吗?

使所有受影响的DbConnection实例方法同步的更好方法吗?

那不是一个好的设计。

不必通过在必要时使它的方法/块同步来使DBConnection类具有固有的线程安全性,而是强制此类的所有客户端在每次需要时显式同步。 因此,您无需将此线程安全性封装在一个单独的,明确确定的类中,而是将这种责任分配给该类的所有客户端,从而使整个过程变得非常脆弱,并且非常难以发现潜在的错误。

也就是说,使用来自多个线程的单个数据库连接本身不是一个好主意。

如果您的DbConnection的所有实例方法都需要同步,则使所有方法都同步。 不要看写的代码量,而只看正确性。 如果同步每个方法,那么您将没有机会追溯到现在,而是调用getDatabaseConnection却忘记了同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM