我有一个服务器为连接到服务器的每个用户创建一个子线程。子服务器类有run方法和其他方法。
一种方法使用select。
搜索mysql数据库另一种方法是更新数据库。
当另一个线程使用更新数据库的方法时,如何阻止搜索数据库的方法?
答案 0 :(得分:7)
正确处理您的要求的方法是在事务中执行所有数据库操作。这样可以避免任何数据库代码互斥的需要,并且还可以保证Java进程与执行自己操作的任何其他数据库客户端之间的隔离。
答案 1 :(得分:1)
答案 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
}
}
}