我知道synchronized
关键字使方法一次仅在单个类上运行。但问题就在这里。
我有一个带有方法的数据库类,例如insertAccount
、updateSetting
等。如果我使insertAccount
、updateSetting
同步,它们中的每一个都将能够运行一次仅在一个线程上。
如果有一种方法可以处理整个数据库,那就太好了,但是没有一种方法。如果一个线程调用insertAccount
,而另一个线程同时调用updateSetting
,就会出错,对吗?
因为任何时候只能运行这些方法之一。那我该怎么办?
有没有办法将诸如synchronized
之类的东西应用于整个类?因此,如果第一个线程调用 insertAccount
且第二个线程同时调用 updateSetting
,则第二个线程必须等待,直到第一个线程完成访问数据库。
最佳答案
真正的答案在这里:退后一步,做一些研究。您不应该在这里使用同步,而是查看读取器/写入器之前转向该“DB”时需要获取的锁定对象。类(class)”。请参阅here了解更多信息。
另一方面,您应该了解什么是事务,以及您的数据库如何支持这些事务。含义:存在不同类型的问题;不同的层(应用程序代码、数据库)具有不同的职责。
你看,使用“反复试验”并不是一种在这里可行的方法。您应该花一些认真时间来研究基本概念。否则您将面临损坏数据集的风险;更糟糕的是:您编写的代码在大多数情况下都可以正常工作;但“随机”地以晦涩的方式失败。因为当多个线程以不受控制的方式操作共享数据时就会发生这种情况。
关于java - 如何让所有类方法只在单线程上运行? (同步课?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144812/