当另一个线程正在更新数据库时,如何阻止查询线程?

时间:2013-11-04 19:27:41

标签: java multithreading sync

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

一种方法使用select。

搜索mysql数据库

另一种方法是更新数据库。

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

执行此操作的最佳方法是数据库事务和正确的isolation级别。

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

  

阅读未提交的

     

读取已提交的

     

可重复读取

     

序列化

答案 2 :(得分: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
   }

}

}
相关问题