• 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 ..............    
              
    }

    缺点是第一次加载时反映稍慢,但是能在绝大多数保证对象的唯一性;

  • 相关阅读:
    Concurrent
    Java多线程状态切换
    Java中volatile如何保证long和double的原子性操作
    协程与线程
    线程饥饿
    线程活锁
    线程死锁
    Java Thread之start和run方法的区别
    ThreadLocal内存泄漏
    interrupt和interrupted和isInterrupted的区别
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/6046611.html
Copyright © 2020-2023  润新知