我有一个服务器,它为每个连接到服务器的用户创建一个子线程。子服务器类有 run 方法和其他方法。
一种方法是使用 select 搜索 mysql 数据库。
另一种方法更新数据库。
当另一个线程使用更新数据库的方法时,如何阻止搜索数据库的方法?
我有一个服务器,它为每个连接到服务器的用户创建一个子线程。子服务器类有 run 方法和其他方法。
一种方法是使用 select 搜索 mysql 数据库。
另一种方法更新数据库。
当另一个线程使用更新数据库的方法时,如何阻止搜索数据库的方法?
处理您的要求的正确方法是在事务中执行所有数据库操作。这将避免数据库代码互斥的任何需要,并且还将保证您的 Java 进程与任何其他执行其自己操作的数据库客户端之间的隔离。
不确定你是否有一个好的设计这样做,但如果你想在方法上使用互斥锁,请将方法声明为同步
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
}
}
}