Android 如何解決數據庫多線程鎖的問題


防止多個線程又是讀取又是寫入

網上找到的方法:

對於這樣的問題,解決的辦法就是keep single sqlite connection,保持單個SqliteOpenHelper實例,同時對所有數據庫操作的方法添加synchronized關鍵字。

完美解決sqlite的 database locked 或者是 error 5: database locked 問題

 

意思就是對保存刪除或者此類數據庫操作的最上層的方法加鎖,這樣就能防止數據庫被同一時間不同地方調用了

然后單例模式也可以解決數據庫同時讀寫引起的錯誤;

比如使用如下DCL模式

public class XutilsHelper {
    private DbManager db;

    private static  XutilsHelper sInstance = null ;

    public static XutilsHelper getInstance(){
        if(sInstance == null){
            synchronized (XutilsHelper.class){
                if(sInstance == null ){
                    sInstance  = new XutilsHelper();
                }
            }
        }
        return sInstance;
    }

    private XutilsHelper(){};
     
    //相關操作代碼省略  
    public ..............    
          
}

缺點是第一次加載時反映稍慢,但是能在絕大多數保證對象的唯一性;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM