android Ist Sqlite-Datenbank-Instanz Thread sicher





2 Answers

Das Android verwendet einen Java-Sperrmechanismus, um den SQLite-Datenbankzugriff serialisiert zu halten. Wenn also mehrere Threads eine db-Instanz haben, ruft sie immer serialisiert die Datenbank an, und natürlich ist die Datenbank Thread-sicher .

Wenn wir bestätigen, dass wir eine Datenbank aus einem einzelnen Thread verwenden, hatten wir die Möglichkeit, die interne Sperre der Datenbank durch Aufruf von setLockingEnable(false) aber diese Methode wurde ab API-Stufe 16 nicht mehr verwendet und nicht mehr verwendet. Wenn Sie die Implementierung dieser Methode in der SQLiteDatabase Klasse sehen, finden Sie dort nichts geschrieben, dh eine leere Methode.

public void setLockingEnabled (boolean lockingEnabled)

Diese Methode macht jetzt nichts. Verwende nicht.

Eine Sache, um die wir uns kümmern sollten, ist, dass wir eine Instanz Ihrer Hilfsklasse machen (dh indem wir Singleton machen) und dieselbe Instanz mit mehreren Threads teilen und nicht clos close() in der Datenbank zwischen den Operationen aufrufen, sonst bekommen Sie vielleicht folgende Ausnahme:

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

Also, rufen Sie nicht database.close() zwischen den Zugriff auf die Datenbank, Datenbank selbst führen schließen Operation intern, wenn alle Operation beendet wäre.

android sqlite locking thread-safety

Ich habe eine Datenbank mit einigen Tabellen. Ich möchte die Tabellen mit mehreren Threads aktualisieren. Ich werde dieselbe Instanz von SQLiteDatabase in allen Threads verwenden.

Bitte schlagen Sie vor, ob dieser Ansatz korrekt ist. Ist Sqlite-Datenbank threadsafe? Können zwei verschiedene Threads die gleiche Tabelle für verschiedene Werte gleichzeitig aktualisieren.




Wenn du es machst ..

setLockingEnabled (boolean lockingEnabled) Legt fest, ob die SQLiteDatabase threadsicher ist, indem Sperren um kritische Abschnitte verwendet werden.




Related