是否有必要在MySQL上同步输入和输出语句?
数据库
public class Database {
private Object locker = new Object();
public boolean createUser(String username, String password) {
synchronized (locker) {
//INSERT statement
}
}
public boolean isValidLoginAndPassword(String login, String password) {
synchronized (locker) {
//SELECT statement
}
}
}
答案 0 :(得分:1)
您需要synchronized
的唯一时间是强制执行线程安全。其他问题已经解决了Is java.sql.Connection thread safe?的问题。其中简短的回答是,大多数情况下,不,您不需要线程同步 - JDBC规范是线程安全的。然而,这可能因sql驱动程序而异,因此您可能实际是线程安全的,但是有一些库可以帮助缓解这种情况(如Apache Commons连接池)。
但是您可能想要问的更大的问题是,即使他们 线程安全,当两个线程尝试使用相同的Connection
时会发生什么?其中一个将不得不等待,这通常是不受欢迎的。如果您有多个线程执行相同的工作,连接池(或至少一个工作队列)最有意义:线程相互阻塞的可能性要小得多,并且您不必担心是否驱动程序是线程安全的。