java - 如何让所有类方法只在单线程上运行? (同步课?)

标签 java multithreading sqlite jdbc synchronized

我知道synchronized关键字使方法一次仅在单个类上运行。但问题就在这里。

我有一个带有方法的数据库类,例如insertAccountupdateSetting等。如果我使insertAccountupdateSetting同步,它们中的每一个都将能够运行一次仅在一个线程上。

如果有一种方法可以处理整个数据库,那就太好了,但是没有一种方法。如果一个线程调用insertAccount,而另一个线程同时调用updateSetting,就会出错,对吗?

因为任何时候只能运行这些方法之一。那我该怎么办?

有没有办法将诸如synchronized之类的东西应用于整个类?因此,如果第一个线程调用 insertAccount 且第二个线程同时调用 updateSetting,则第二个线程必须等待,直到第一个线程完成访问数据库。

最佳答案

真正的答案在这里:退后一步,做一些研究。您不应该在这里使用同步,而是查看读取器/写入器之前转向该“DB”时需要获取的锁定对象。类(class)”。请参阅here了解更多信息。

另一方面,您应该了解什么是事务,以及您的数据库如何支持这些事务。含义:存在不同类型的问题;不同的层(应用程序代码、数据库)具有不同的职责

你看,使用“反复试验”并不是一种在这里可行的方法。您应该花一些认真时间来研究基本概念。否则您将面临损坏数据集的风险;更糟糕的是:您编写的代码在大多数情况下都可以正常工作;但“随机”地以晦涩的方式失败。因为当多个线程以不受控制的方式操作共享数据时就会发生这种情况。

关于java - 如何让所有类方法只在单线程上运行? (同步课?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144812/

相关文章:

java - 如何根据构造函数值获取枚举实例并进行一般转换?

java - 如何测试绘制到 Canvas 的方法?

c - 为什么当我在 C 语言的矩阵乘法程序中增加矩阵元素的值时会出现段错误?

macos - SQLite 数据库的实时单向镜像

java - Android 和 Java key 生成返回不同的结果

java - 将 FileInputStream 转换为返回十六进制的流

.net - SemaphoreSlim.Wait( CancellationToken ) 对OperationCancelledException 进行正确的try/finally 吗?

multithreading - 从不同线程中的繁重操作同步写入文件

java - 在主机 Java 中连接 SQLite 时遇到问题

asp.net - 我们可以将 SQL Server 数据库文件转换为 SQLite 文件或 .db 文件吗?