У меня есть база данных, которая содержит отправленные электронные письма. Я использую несколько потоков для отправки этих сообщений электронной почты. Подход, который я использую, заключается в том, что каждый поток будет запрашивать базу данных, получать N сообщений электронной почты в памяти и маркировать их как отправленные. В другом потоке эти N-сообщения электронной почты будут отмечены как отмеченные и перейдут на следующую N записей.Синхронизированный доступ к БД в Java
Теперь это не работает, так как thread1 может обновлять записи как отправленные, запросы thread2 для электронной почты и, следовательно, оба потока в конечном итоге получают одинаковый набор сообщений электронной почты.
Каждый поток имеет свое собственное подключение к базе данных. Это основная причина такого поведения? Должен ли я просто делиться одним объектом соединения по всем потокам? Или есть лучший подход, который я мог бы использовать?
Даже если у меня есть несколько объектов моего класса DAO, который обрабатывает все мои данные базы данных, будет ли это работать? Я имею в виду, будет ли он работать через объекты, если есть несколько подключений к базе данных? – akshayt23
Вы будете иметь только один поток, выполняющий код синхронизированного блока каждый раз. Так что это сработает. Извините плохой английский. –
Читайте это: http://tutorials.jenkov.com/java-concurrency/synchronized.html. Надеюсь, поможет. –