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

Java 如何使所有类方法仅在单个线程上运行?(同步类?),java,multithreading,sqlite,jdbc,synchronized,Java,Multithreading,Sqlite,Jdbc,Synchronized,我知道synchronized关键字使方法一次只能在单个类上运行。但问题是 我有一个带有方法的数据库类,例如,insertAccount,updateset,等等。如果我使insertAccount,updateset同步,那么每次只能在一个线程上运行 若有一种方法可以用于整个数据库,那个就太好了,但并没有一种方法。如果一个线程调用insertAccount,而另一个线程同时调用updateSetting,那么它会坏掉,对吗 因为任何时候都只能运行其中一个方法。那我该怎么办 有没有一种方法可以将

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

我有一个带有方法的数据库类,例如,
insertAccount
updateset
,等等。如果我使
insertAccount
updateset
同步,那么每次只能在一个线程上运行

若有一种方法可以用于整个数据库,那个就太好了,但并没有一种方法。如果一个线程调用
insertAccount
,而另一个线程同时调用
updateSetting
,那么它会坏掉,对吗

因为任何时候都只能运行其中一个方法。那我该怎么办


有没有一种方法可以将类似于
synchronized
的东西应用于整个班级?因此,如果第一个线程同时调用
insertAccount
和第二个线程调用
updateset
,那么第二个线程必须等到第一个线程完成对数据库的访问。

您误解了
同步的工作方式

如果通过
synchronized
标记类的两个方法,则在任何时刻都只能执行其中一个(除非调用
wait

还要注意的是,如果这个类有多个实例,那么可以同时执行不同实例的方法。

这里真正的答案是:后退一步,做一些研究。您不应该在这里使用synchronized,而是查看一个对象,读写器在转到该“DB类”之前需要获取该对象。有关更多信息,请参阅

另一方面,您应该了解什么是事务,以及数据库如何支持这些事务。意思是:有各种各样的问题;不同的层(应用程序代码、数据库)有不同的职责


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

您应该使用锁定机制,这样的信号量您应该依赖(正确使用)具有适当事务隔离级别的数据库事务,如果您有多个节点托管(web)应用程序,它甚至可以工作(假设它们使用相同的数据库).看一看:谢谢,嗯,你是说它不会坏吗?我只有一个数据库类实例。你确定我不需要任何锁定机制吗?是的。它足以在所有访问或修改对象状态的方法上放置
synchronized
。这不是最好的方法,但它是最简单的方法。一般来说,只要坚持
synchronized
在没有考虑或思考的情况下,做任何事情都不会让它神奇地安全穿行或“正确”行事。@markrottveel是的,在corse。做任何“没有考虑或思考”的事情都不会带来任何好处。