1

我有一个服务器,它为每个连接到服务器的用户创建一个子线程。子服务器类有 run 方法和其他方法。

一种方法是使用 select 搜索 mysql 数据库。

另一种方法更新数据库。

当另一个线程使用更新数据库的方法时,如何阻止搜索数据库的方法?

4

3 回答 3

7

处理您的要求的正确方法是在事务中执行所有数据库操作。这将避免数据库代码互斥的任何需要,并且还将保证您的 Java 进程与任何其他执行其自己操作的数据库客户端之间的隔离。

于 2013-11-04T19:32:49.793 回答
1

最好的方法是数据库事务和适当的隔离 级别。

以下是 MySql 中的一些隔离级别:

读取未提交

读已提交

可重复读取

可序列化

于 2013-11-04T19:33:20.803 回答
0

不确定你是否有一个好的设计这样做,但如果你想在方法上使用互斥锁,请将方法声明为同步

public synchronized void putInDbase(String value) {
  //only one thread will execute here at a time
}

但是如果你在同一个类中有两个单独的方法,你想同步处理数据库的实际代码,你可以制作同步块

public class myDbase {
     public void search() {

    synchronized(this) {
     //database code
    }

}

public void update() {

   synchronized(this) {
      //database code
   }

}

}
于 2013-11-04T19:30:05.203 回答