SQLite поддерживает несколько разных уровней изоляции, которые можно выбрать во время компиляции и во время выполнения.
http://www.sqlite.org/threadsafe.html
Я предполагаю, что Androidite SQLite по умолчанию находится в режиме Serialized . С точки зрения многопоточного доступа, он выполняет блокировку чтения / записи на уровне файловой системы, чтобы позволить нескольким читателям, но только одному устройству записи одновременно:
http://www.sqlite.org/faq.html#q5
Однако ORMLite рекомендует настоятельно и попытался hard поддерживать единственное соединение с базой данных, поэтому проблемы с блокировкой могут быть неактуальными.
В частности, если один поток обновляет запись, а другой читает, то это условие состязания. Либо читающая ветка получит запись до обновления или после его завершения. Однако читатель не получит частично обновленные данные. Но я подозреваю, что вы это знали.
С точки зрения уровней изоляции, поддерживаемых SQLite, по умолчанию Serialized , как уже упоминалось, но похоже, что он поддерживает read-uncommitted , по крайней мере, до некоторой степени.
http://www.sqlite.org/sharedcache.html
Вы можете использовать ORMLite Dao.executeRaw () , чтобы включить его:
dao.executeRaw("PRAGMA read_uncommitted = True;");
Однако я не имею никакого опыта в этом, и я не уверен, что он даст вам согласованное представление об обновленной строке, если к ней обращаются несколько раз в одном и том же запросе. Это может быть связано с согласованными представлениями во время транзакций записи.
Прочитав этот похожий вопрос , я не уверен, что можно гарантировать одно и то же представление строки в таблице, если к ней обращаются несколько раз в одном и том же запросе.