Android SQLite: блокировка + доступ из нескольких потоков - PullRequest
1 голос
/ 19 февраля 2012

Я пытаюсь понять возможные способы работы с SQLite, когда на БД может работать несколько потоков.Основываясь на различных ответах в stackoverflow и других сайтах, кажется, что будет проблема блокировки, когда один и тот же экземпляр sqlitehelper используется из нескольких потоков.В типичном java-приложении я бы ожидал, что экземпляр будет означать, что один объект типа sqlite helper будет использоваться разными потоками приложения. В таких случаях, я думаю, блокировки - это вопрос правильного использования синхронизированных блоков.[Поправьте меня здесь, так как мне неудобно смотреть на экземпляр sqliethelper здесь]

Меня интересует совместное использование одной и той же базы данных: когда один экземпляр помощника sqlite в разных потоках [т.е. каждый поток имеет свой собственный объектэкземпляр], но работающий с той же базой данных [это, я думаю, более встраиваемо в тот же экземпляр БД].В таких случаях я получаю частые ошибки блокировки базы данных.Это происходит, даже когда потоки работают с разными таблицами базы данных.

В моем приложении база данных может быть обновлена ​​путем взаимодействия с пользователем через приложение или путем получения данных через сервер [периодическая синхронизация].И иногда, когда процесс синхронизации и пользовательская активность перекрываются, у меня возникают проблемы с блокировкой.Поскольку этот шаблон обработки данных, по-видимому, распространен при синхронизации приложений с сервером, хотелось бы знать, как решить проблему блокировки из-за параллелизма.

Я хотел бы понять это, поскольку, если это связано сслучается всегда, тогда, вероятно, нужно сделать только один обработчик над базой данных и реализовать очередь поверх этого, чтобы избежать блокировки.Но это будет означать, что полное приложение должно знать, что база данных может обновляться не сразу, и им нужно внедрить слушатель, чтобы знать, когда данные действительно обновляются в базе данных.

спасибо pradeep

1 Ответ

0 голосов
/ 19 февраля 2012

Насколько я знаю, sqlite предназначен для использования одного процесса . Неважно, что вам всегда нужно для доступа к базе данных из одного потока за раз. Вы можете делать выбор из нескольких клиентов, но можете писать только по одному за раз. А другим читателям и писателям придется запираться в это время.

Как примечание: доступ к базе данных вряд ли можно считать мгновенным.

...