Мне нужно синхронизировать запрос mysql, так что только один пользователь может получить доступ к указанной части в одно и то же время. Я пробовал synchronized(){}
, но это не работает. Пользователи могут одновременно обращаться к методу. Это приложение jsp, использующее tomcat6. Мне нужно это, потому что веб-сервер падает, когда слишком много пользователей запускают запрос одновременно.синхронизация нескольких методов доступа
String sql = "SELECT * FROM products;"
ResultSet rs;
//This block should be synchronized
Statement s = con.createStatement();
rs = s.excecuteQuery(sql);
while (rs.next()) {
// do some stuff..
}
Благодарим за любую помощь.
Edit: как я пытался синхронизировать
public class connect {
public static String URL = "url";
public static String USER = "root";
public static String PASSWORD = "password";
private Object lock = new Object();
public void getData() {
Connection con;
try {
con = DriverManager.getConnection(URL, USER, PASSWORD);
String sql = "SELECT * FROM products;";
ResultSet rs;
//This block should be synchronized
synchronized(lock) {
Statement s = con.createStatement();
rs = s.executeQuery(sql);
while (rs.next()) {
// do some stuff..
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Я думаю, что объект lock
должен храниться на сервере. Но каков правильный способ сделать это?
не могли бы вы показать, как вы пытались синхронизироваться в своем коде? –
Я обновил свой пост .. –
ваш 'lock' является' null'. Хотя я не слишком знаком с синхронизированными блоками, я думаю, что это должен быть экземпляр, а не 'null' –