Является ли метод executeUpdate в Java потокобезопасным - PullRequest
1 голос
/ 12 января 2012

У меня есть несколько потоков, пытающихся обновить базу данных MySQL? метод executeUpdate является поточно-ориентированным для использования?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Нет, это не потокобезопасное использование.

На самом деле, если какой-то другой поток использует оператор, а затем другой поток вызывает executeUpdate (), тогда ResultSet s другого потока, если таковые имеются, будут закрыты. JavaDoc для java.sql.Statement (подтипом которого является PreparedStatement)"Все методы выполнения в интерфейсе Statement неявно закрывают текущий объект ResultSet статута, если существует открытый."

Кроме того, маловероятно, что данная реализация executeUpdate() будет написана как многопоточная.

Вам следует либо синхронизировать все использование оператора и результирующих наборов результатов, либо создать несколько соединений, чтобы каждый поток использовал свой собственный JDBC Connection с базой данных. Я бы порекомендовал последнее.

0 голосов
/ 12 января 2012

Подумайте о создании методов обновления с использованием синхронизированного ключевого слова и подумайте о взаимоблокировке ваших потоков параллелизма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...