是否有必要将I / O操作同步到MySQL

时间:2016-04-20 16:43:10

标签: java mysql thread-synchronization

是否有必要在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
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

您需要synchronized的唯一时间是强制执行线程安全。其他问题已经解决了Is java.sql.Connection thread safe?的问题。其中简短的回答是,大多数情况下,不,您不需要线程同步 - JDBC规范是线程安全的。然而,这可能因sql驱动程序而异,因此您可能实际是线程安全的,但是有一些库可以帮助缓解这种情况(如Apache Commons连接池)。

但是您可能想要问的更大的问题是,即使他们 线程安全,当两个线程尝试使用相同的Connection时会发生什么?其中一个将不得不等待,这通常是不受欢迎的。如果您有多个线程执行相同的工作,连接池(或至少一个工作队列)最有意义:线程相互阻塞的可能性要小得多,并且您不必担心是否驱动程序是线程安全的。