Singleton vs Lock on Database

时间:2014-05-13 12:07:32

标签: java android sqlite synchronized

我一直使用Singleton模式创建应用SQLite的应用,但现在我想知道是否最好使用这样的锁:

class DatabaseHelper {
    Object lock
    SQLiteDatabase db;

    // more properties....

    public void insert(BusinessEntity entity) {
         synchronized(lock) {
             db.insert(BusinessEntity.TABLE_NAME, // more params...
         }
    }

}

到目前为止,我一直使用单例,我从不担心查询没有执行多个连接到同一个DB的原因,但据我所知,锁定也可以解决这个问题。

这里有什么更好的方法,为什么?而且,synchronized例子还可以吗?我之前从未使用过synchronized所以我不确定它是否可以。

1 个答案:

答案 0 :(得分:0)

Singleton和Lock是两个不同的概念,并不相互关联。锁定在对象级别上获取,但不在类级别上获取。对象是单例对象还是普通对象并不重要。

<强>的Singleton

在软件工程中,单例模式是一种设计模式,它将类的实例化限制为一个对象。当需要一个对象来协调整个系统的操作时,这非常有用。请注意,单例模式不会对对象应用锁定。例如,2个不同的线程共享相同的单个对象引用,并且可以同时调用该单个对象上的不同方法。

锁定

锁意味着,我们限制同时通过2个不同的线程访问相同的资源(对象)。 Java使用synchronized块或synchronized方法实现了锁概念。

注意:在您的代码示例中,您正在获取“ lock ”对象的锁定(即同步(锁定)) 但不是“ db ”对象。要获取db对象的锁定,您必须将代码更改为

synchronized(db){
......
}