java - 局部变量同步,比同步方法更好?

标签 java multithreading thread-safety synchronized local-variables

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

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

这段代码安全吗?如前所述here尽管在局部变量上同步,但它应该可以工作。只要保证对象实例相同,这是否正确?

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

最佳答案

这不是好的设计。

不是通过在必要时同步其方法/ block 来使 DBConnection 类本质上是线程安全的,而是强制此类的所有客户端在每次需要时显式同步。因此,您不是将线程安全性封装在单个、明确的类中,而是将该责任分配给该类的所有客户端,从而使整个事情变得极其脆弱,并且潜在的错误极难发现。

也就是说,从多个线程使用单个数据库连接本身就是一个坏主意。

关于java - 局部变量同步,比同步方法更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731540/

相关文章:

Java 聊天客户端 jtextfield 与 jtextarea

java - 使用 setText 在 jLabel 上设置文本被延迟

multithreading - 如何在unix中创建线程?

unix - POSIX 线程 : are pthreads_cond_wait() and others systemcalls?

java - 如何在线程安全环境中定义静态Arraylist

java - 如何在Java中制作整个 window 的毛玻璃?

java - 尝试一次使用 100 个线程。

c# - 如何查询正在运行的线程

java - 如何显示java arraylist的不同步性?

java - Android Activity会关闭Looper&Handler吗?