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

时间:2017-07-17 12:52:00

标签: java multithreading sqlite jdbc synchronized

我知道synchronized关键字make方法一次只能在单个类上运行。但这是问题所在。

我有一个包含方法的数据库类,例如insertAccountupdateSetting等。如果我使insertAccountupdateSetting同步,则每个人都可以一次仅在一个线程上运行。

如果有一个整个数据库的方法,它会很棒,但没有一个。如果一个线程调用insertAccount而另一个线程同时调用updateSetting ,它会变坏,对吧?

因为这些方法中只有一种可以随时运行。那我该怎么办?

有没有办法将synchronized这样的东西应用到全班?因此,如果第一个线程同时调用insertAccount和第二个线程调用updateSetting,则第二个线程必须等到第一个线程完成访问数据库。

2 个答案:

答案 0 :(得分:5)

这里的真实的答案:退一步做一些学习。您不应该在此处使用 synchronized ,而是查看读者/作者需要获取的锁定对象之前转向“DB”类”。有关详细信息,请参阅here

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

你知道,使用“试错法”并不是一种可以在这里解决的方法。你应该花一些认真的时间研究基础概念。否则,您可能会损坏您的数据集;更糟糕的是:你冒着编写大多数时候工作正常的代码的风险;但是以“随机”的模糊方式失败。因为当多个线程以不受控制的方式操纵共享数据时会发生这种情况。

答案 1 :(得分:1)

你误解了synchronized的工作方式。

如果您按synchronized标记两个类方法,则只能在任何时刻执行其中一个方法(除非您调用wait)。

另请注意,如果您有多个此类的实例,则可以同时执行不同实例的方法。